2015-01-16 2 views
2

저는 API를 작성하고 HTTP 상태 코드를 사용하여 쿼리 결과를보고 싶은 사람을 알고 있습니다. 예 : 사용자가 example.com/api/product_info?product_id=X을 호출하고 해당 제품이 없으면 HTTP 상태 400: Bad Request을 반환합니다. 나는 이것이 유효한 호출 (즉, 실제 HTTP 요청이 잘못된 형식이 아니기 때문에)이 200 코드 응답을 반환해야하며 응답의 몸체는 {status: 'error'; message: 'No such product'}과 같아야한다고 생각합니다.비 HTTP 오류에 HTTP 상태 코드를 사용하는 것이 적절합니까?

그래서 제 질문은

1) 위의 예에서와 같이, 비 HTTP 프로그램 상태를 전달하기 위해 HTTP 상태 코드를 사용하는 것이 적절하다, 무엇입니까?

2) HTTP 상태 코드가 사용하기에 적합한지를 설명하는 표준 또는 적어도 널리 사용되는 사양이 있습니까? 실제로 단지 이것에 대해 다른 일을 얘기했다

+0

클라이언트가 존재하지 않는 제품 리소스를 클라이언트가 요청할 때 404가 적합하다고 생각합니다. 꼭해야 할 일이 없으면 4XX 또는 5XX를 반환해야합니다. [This] (http://stackoverflow.com/questions/27921537/returning-http-200-ok-with-error-within-response-body/) 도움이 될 수 있습니다. 2. [HTTP 사양] (https://www.ietf.org/rfc/rfc2616.txt) – FrAn

+0

@FrAn 이것이 실제로 존재하지 않는 리소스의 경우인지 확실하지 않습니다. 다른 예를 들어, API 호출이'/ setprice? product = X & price = Y' 인 경우 제품 X가 존재하지만 Y가 수용 가능한 가격이 아닌 경우 어떤 응답을 반환합니까 (예 : 최소 가격이 $ 5 일 때 $ 1)? 아직도 404? – Benubird

+0

이 경우 고객이 가격을 설정하려고 시도하는이 경우 400 또는 403을 반환하지만 가격 값은 허용되지 않으므로 제품을 얻으 려하지 않으므로 404가됩니다. 이는 논쟁의 여지가있는 문제입니다. – FrAn

답변

1

-200가 "OK"이고 성공적으로 반환되는 데이터에 사용되어야로 http://blogs.mulesoft.org/api-best-practices-response-handling/

귀하의 상태 코드는 API의 반응을 반영해야한다. 그러나 생성 된 항목에는 201을 사용해야합니다.

이미 언급했듯이 사용자가 호출을 시도했지만 실패 (예 : users /? id = 5) 한 경우 서버는 사용자에게 잘못된 요청임을 알리기 위해 400을 되돌릴 수 있습니다. 404 리소스가없는 경우.

또한 액션에 따라 달라집니다. 사용자를 검색하고 응답이없는 경우 오류가 표시되지 않으며 결과가없는 200 개만 반환됩니다. 그러나 존재하지 않는 사용자에게 PUT 또는 PATCH를 수행하려고 시도하는 경우 오류가 있음을 알릴 수 있습니다. 어딘가에 응용 프로그램 내에 문제가있을 수 있습니다.

위의 링크에서 더 많은 상태 코드를 찾을 수 있지만 상태 코드를 사용하는 데있어서 가장 큰 장점 중 하나는 서버에 실제로 발생한 헤더를 클라이언트에게 알리는 것입니다. 이렇게하면 몸체를 비 직렬화하고 오류 키를 찾는 배열을 반복해야하는 대신 상대적으로 빠른 (및 메모리 부족) 검사를 수행 할 수 있습니다.

본질적으로, 개발자는 모든 사람 (제정신) 개발자가 느끼는 상황을 쉽고 빠르게 이해할 수있는 도구를 제공합니다.

희망이 도움이됩니다. - 마이크

관련 문제