외부 api에 붙어서 데이터를 가져온 후 연동시키는 작업
자바에서는 HttpURLConnection 을 이용해서 http 통신을 할 수 있다. url이 유효한지 판단하려면 일단 이 HttpURLConnection
을 이용해서 리퀘스트를 날려봐야한다.
리퀘스트를 날리기만 하면, 옳다/그르다 response가 온다고 보장할 수 있을까?
아니다.
url은 유효하지만, 지원하지 않는 method로 요청하면 405 error가 발생한다.
우리는 그 답을 표준(Method - rfc2616)에서 찾을 수 있다.
The list of methods allowed by a resource can be specified in an Allow header field (section 14.7). The return code of the response always notifies the client whether a method is currently allowed on a resource, since the set of allowed methods can change dynamically. An origin server SHOULD return the status code 405 (Method Not Allowed) if the method is known by the origin server but not allowed for the requested resource, and 501 (Not Implemented) if the method is unrecognized or not implemented by the origin server. The methods GET and HEAD MUST be supported by all general-purpose servers. All other methods are OPTIONAL; however, if the above methods are implemented, they MUST be implemented with the same semantics as those specified in section 9.
http 표준에 따르면 general-purpose server 들은 GET, HEAD 요청을 무조건 지원해주어야 한다. 여기서 당장 api에 붙어서 데이터를 가져올 건지, 후처리로 가져올 건지에 따라 2가지 선택지를 취할 수 있다.
1) 당장 api에 붙어서 데이터를 가져와야하는 경우
2) 데이터 가져오는 작업은 후처리로 넘기고, url이 유효한지 판단하기만 하면 되는 경우
이 문제의 답도 표준에 있다.
처음에 언급했듯이 url은 유효하지만, 요청한 method를 지원하지 않는다면 무조건 405 error 를 내려준다.
405 error가 따라붙는 표준을 살펴보자. 헤더 필더 중 ALLOW 정의에 따르면
The Allow entity-header field lists the set of methods supported by the resource identified by the Request-URI. The purpose of this field is strictly to inform the recipient of valid methods associated with the resource. An Allow header field MUST be present in a 405 (Method Not Allowed) response.
Example of use:
Allow: GET, HEAD, PUT
405 status가 반환될 때는 헤더에 Allow 필드가 무조건 포함되어야 한다. 이 필드는 그 uri가 가리키는 resource를 지원하는 method들을 알려준다. 즉, 이 필드를 이용해서 유효한 url 이지만 그저 표준을 지키지 않은 것인지 판단할 수 있다.
[예시(간략히)]
HEAD request -> 405 status response(allow: GET)
어쩔도리가 없다. 표준을 지키지 않은 대상을 보정해주는 것이 얼마 만큼 가치있는지 먼저 판단해보자.