[웹 API 디자인] 13. 예외적인 동작 처리 팁
예외적인 동작 처리 팁
지금까지는 기본적이고 표준적인 동작들을 다루어 보았습니다.
여기에서는 Web API의 클라이언트가 논의한 모든 사항을 처리할 수 없는 경우에 발생할 수 있는 몇 가지 예외에 대해 살펴보겠습니다. 예를 들어 때때로 클라이언트는 HTTP 오류 코드를 가로채거나 제한된 HTTP 메서드를 지원합니다.
특정 클라이언트의 한계 내에서 작동하고 이러한 상황을 처리하는 방법은 무엇일까요?
클라이언트가 HTTP 오류 코드를 가로채는 경우
어도비 플래시의 일부 버전에서 흔한 문제 중 하나는 HTTP 200 OK 이외의 HTTP 응답을 보내면 Flash 컨테이너가 해당 응답을 가로채고 앱의 최종 사용자 앞에 오류 코드를 표시한다는 것입니다.
그 결과, 앱 개발자는 오류 코드를 가로챌 기회를 갖지 못합니다. 앱 개발자는 API가 이를 어떤 방식으로든 지원해야 합니다.
Twitter는 이 문제를 처리하는 데 탁월한 작업을 수행합니다.
suppress_response_codes는 선택적으로 사용 가능한 매개변수입니다.
이 매개변수를 true로 설정하면 HTTP 응답이 항상 200이 됩니다.
/public_timelines.json?suppress_response_codes=true
HTTP status code: 200 {"error":"Could not authenticate you."}
이 매개변수는 상당히 장황한 응답 코드입니다. (src와 같은 것을 사용할 수 있었지만 Twitter는 장황한 방식을 채택했습니다.)
이는 URL을 살펴볼 때 응답 코드가 억제되고 있는지 확인해야 하는 중요한 사항입니다. 이는 앱이 이에 대해 어떻게 응답할지에 대한 중요한 영향을 미치기 때문입니다.
전반적인 권장 사항:
1 - suppress_response_codes = true 사용 2 - HTTP 코드는 더 이상 단순히 코드를 나타내는 것이 아님
이전 섹션에서 다룬 오류 처리 규칙이 변경됩니다. 이 문맥에서 HTTP 코드는 더 이상 코드나 프로그램을 위한 것이 아닙니다. 클라이언트 앱은 항상 동일하기 때문에 HTTP 상태 코드를 확인하지 않습니다.
3 - HTTP 응답에 넣을 응답 코드를 응답 메시지로 전달
아래 예시에서는 응답 코드가 401인 것을 확인할 수 있습니다. 또한 해당 메시지에 추가적인 오류 코드와 상세 정보를 포함시켜야 합니다.
Always return OK
/dogs?suppress_response_codes = true
Code for ignoring
200 - OK
Message for people & code
{
"response_code" : 401,
"message" : "Verbose, plain language description of the problem with hints about how to fix it.",
"more_info" : "http://dev.tecachdogrest.com/errors/12345",
"code" : 12345
}
클라이언트가 제한된 HTTP 메소드를 지원하는 경우
GET 및 POST만 지원하고 PUT 및 DELETE는 지원하지 않는 것이 일반적입니다.
4 개의 HTTP 메소드의 무결성을 유지하기 위해, Ruby on Rails 개발자들이 일반적으로 사용하는 다음 방법론을 사용하는 것이 좋습니다.
URL에서 메소드를 선택적 매개변수로 만듭니다.
그러면 HTTP 동사는 항상 GET이지만 개발자는 다양한 HTTP 동사를 표현하고 여전히 RESTful한 깨끗한 API를 유지할 수 있습니다.
Create
/dogs?method=post
Read
/dogs
Update
/dogs/1234?method=put&location=park
Delete
/dogs/1234?method=delete
경고: GET 메소드를 사용하여 post 또는 delete 기능을 제공하는 것은 위험할 수 있습니다. 왜냐하면 URL이 웹 페이지에 있으면 Googlebot과 같은 웹 크롤러가 무심코 많은 컨텐츠를 만들거나 삭제할 수 있기 때문입니다. 애플리케이션의 맥락에서 이 접근 방식을 지원하는 것이 어떤 영향을 미칠 수 있는지 꼭 이해하십시오.
댓글남기기