개발자
안녕하세요 클라이언트(프론트)단에서 axios 사용해 REST api return 스펙정리를 해서 서버단과 이야기해 수정을 하려고 합니다. 고려사항 등 도움을 주시면 감사하겠습니다. Method - GET : 정보조회시 - POST : 저장시(회원, 주문, 아이템 등) - PUT : 수정시 - DELETE : 삭제시 현 구현 - HTTP status 200은 성공, 그 외 에러처리 => 서버단에서 보내주는 msg 혹은 프론트에서 하드코딩으로 문자열 출력(alert) 문제점 1) 성공과 실패 및 실패 사유에 대한 return 구조체가 생각 이상으로 깊은 구조이며 일관성이 없음. ex1) response.data = { 객체 정보 } ex2) response.data = "Success"; -- 여기부터 문제 -- ex3) response.data.detail = "Faile"; ex4) response.data.detail[0].msg = "Faile"; // 기타 다른정보들 포함됨 ex5) response.data.messages "문자열" 2) 몇개의 api는 return 값으로 status가 200으로 string 혹은 object가 날라옴. 3) 사용자 정보제공(문자열) 하드코딩 다국어 설정도 고려하고 있기에.. 실패시 정보를 연상코드로 리턴받을까합니다.(개인 생각) 작성하고 보니 어떻게 문제점은 보이는데 좋은 개선점이 있으시면 의견주시면 감사하겠습니다.
답변 1
인기 답변
REST API의 repsonse 정의를 질문하셨습니다. 간단하게 해봅시다. 이 패턴들에 detail이 더 추가되거나, message를 constant code화 시키셔도 됩니다. (자유) 1. http status 200 (성공) GET (성공일시 list나 단일 객체를 반환합니다.) response.data : { "result" : "success", message : "success", code:"200", data: {list : [ ... ]} } response.data : { "result" : "success", message : "success", code:"200", data : {object : { ... }} } DELETE (성공일시 성공 메세지만 반환합니다.) response.data : { "result" : "success", message : "success", code:"200" } PUT, PATCH (성공일시 트랜잭션이 일어난 객체 정보를 반환합니다. (이부분은 논의해서 정리하면 됩니다.)) response.data : { "result" : "success", message : "success", code:"200", data : {detail : "{전달한 객체}"} } 여기부터는 http status에 따른 결과입니다. 회선 불안정이나 서버 이슈등으로 발생할 수 있습니다. 2. http status 404 (api미존재) response.data : { "result" : "fail", "message" : "not found", code:"404", detail : "" } 3. http status 400 (bad request) response.data : { "result" : "fail", "message" : "bad request", code:"400", detail : "" } 4. http status 500 (internal server error) response.data : { "result" : "fail", "message" : "intenal server error", code:"500", detail : "" }
노원재
작성자
Web Developer • 2024년 03월 26일
감사합니다-! 도움이 됬습니다!
박정환
시니어 엔지니어 • 2024년 03월 26일
도움이 되어서 다행입니다. 간단하게 해본거라 엉성할 수 있고, 질문자님 회사 내부 규칙에 맞지 않을 수 있습니다. 참고만 하시고 내부 협의를 통해 서로간에 잘 맞추어 사용하셨으면 좋겠습니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2024년 03월 13일
API return 처리에 대한 언급을 하기 전에, 좋은 RESTful API 디자인은 상태 코드, 메소드, URL 구조 등이 중요하다는 것을 기억하십시오. 1. **HTTP Status codes**: HTTP 응답 코드를 사용하여 서버의 응답 상태를 나타내는 것이 좋습니다. 예를 들어, - 200: OK – 성공적으로 요청을 처리했습니다. - 201: CREATED – 리소스가 성공적으로 생성되었습니다. - 400: BAD REQUEST – 클라이언트의 요청이 잘못되었습니다. - 403: FORBIDDEN – 접근 권한이 없습니다. - 404: NOT FOUND – 특정 리소스를 찾을 수 없습니다. 2. **Consistent Structure**: 성공과 실패 모두 동일한 데이터 구조를 갖게 해야합니다. 그렇지 않으면 클라이언트는 파싱 및 오류 처리에서 복잡성을 겪게 됩니다. 현재 문제에서 이야기하는 주요 문제점은 반환 구조에 일관성이 없다는 것입니다. 이러한 일관성 없음은 개발자들 사이에서 혼란스럽고 버그가 발생하기 쉬운 환경을 만들 수 있습니다. 가능한 해결책으로는 다음과 같은 방법들이 있습니다: - **Standardize the Response Schema**: 모든 응답에 대해 일관된 스키마를 생성하면 클라이언트에서 핸들링을 쉽게 할 수 있습니다. 예를 들어, 각 API 응답은 다음 필드가 포함된 객체를 반환할 수 있습니다: - `status` (required): request의 성공 여부를 나타내는 불리언 값. - `data` (optional): request에 따른 결과 데이터. 성공적인 요청의 경우 이 속성에 결과 데이터가 포함됩니다. - `error` (optional): 에러 발생시 에러 메시지나 상세 정보를 포함합니다. - **Use HTTP Status Codes Consistently**: 성공과 문제인 경우 항상 동일한 상태 코드를 반환하도록 서버를 구성하세요. 이 방법은 클라이언트가 대응하는데 도움이 될 것입니다. - **Error Code System**: 단순히 문자열 메시지로 에러를 반환하는 대신 고유한 오류 코드 시스템을 제공하면, 프론트엔드에서도 해당 코드에 따라 사용자에게 적절한 로컬라이즈된 메시지를 표현할 수 있습니다. 앞서 언급된 방법들은 실제 프로덕션 환경에서 유용하게 사용되는 방법들입니다. 이들을 참고하여 서비스 개선에 도움이 되기를 바랍니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!