REST API 디자인과 관련된 모범 사례에 대해 배우고 GET/cities HTTP/1.1 쿼리를 처리하는 함수를 작성했습니다.GET Method of REST API 디자인의 HTTP 상태 코드
이 함수에는 도시 이름, 여러 도시의 도시 코드를 보유하는 구조체 배열 인 도시가 포함됩니다. 나는이 기능의 가능한 결과에 대해 생각하기 시작했을 때
다음은 이제 코드
func FindCitiesHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json;charset=UTF-8")
if len(cities) == 0 {
w.WriteHeader(404)
return
}
if err := json.NewEncoder(w).Encode(cities); err != nil {
/* what to do here? */
}
w.WriteHeader(200)
}
입니다. 나는이 상황을 발견했다.
JSON 응답으로 모든 도시를 올바르게 반환합니다. 그래서 나는 200 http 상태를 반환한다.
도시 목록이 비어 있습니다. 그래서 돌아올 것이 없습니다. 따라서 404 (리소스를 찾을 수 없음)를 반환합니다.
모든 도시의 JSON 응답을 반환하려고하지만 JSON 인코딩 중에 잘못된 것이 있습니다. 이제 나는 혼란 스럽습니다. 어떻게 이런 상황을 다루어야합니까? 난 당신이 사용자에게 적절하게 메시지를 전달 어떻게 의미
, 비즈니스/애플리케이션 로직 일부 오류/예외가 있다면
- 경우.
- 데이터 액세스 논리에서 몇 가지 문제가 발견되었습니다. (데이터베이스에 연결할 수 없음)
이 상황에서 따라 한 모범 사례를 제안 해 주시겠습니까?
음, 서버 측의 문제를 당신은 5xy 상태 코드가 있습니다. 404에 대해서는 len (cities) == 0 : 이것은 틀린 것 같습니다. 404 "자원을 찾을 수 없습니다",하지만 자원 _was_ _found_, 그냥 자원이 도시를 포함하지 않는 일이 발생합니다. "foobar 같은 파일이 없습니다."라는 차이점을 생각해보십시오. "여기에 'foobar'파일의 내용이 있습니다 (그러나 foobar는 비어있게됩니다)." – Volker
요청이 성공적으로 처리되었지만 응답이 비어있는 경우 응답 코드 204를 사용해야합니다. https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#2xx_Success –
[http constants] (https : // golang)를 사용해야합니다. .org/pkg/net/http/# pkg-constant)를 리턴 코드 대신 사용하십시오. 예 :'w.WriteHeader (http.StatusOK)' – apxp