JSend
omniti-labs/jsend
JSend is a specification for a simple, no-frills, JSON based format for application-level communication. - omniti-labs/jsend
github.com
JSend ?
JSend는 웹 서버의 JSON 응답 형식을 지정하는 방법에 대한 몇 가지 규칙을 규정 한 사양이다.
JSON 데이터를 제공하는 많은 웹 서비스가 있고, 각각 고유한 형식의 응답 형식이 있다. 근데, 데이터를 구성하는 데는 공통적인 패턴은 많이 있지만, naming 또는 types of response 와 같은 항목에는 약속이 없다.
또한 모든 사람이 서로 상호 작용하는 일반적인 접근 방식을 기대할 수 있기 때문에 상호간의 통일성을 개선하는데 도움이 된다.
성공 -> status, data
실패 -> status, data
에러 -> status, message
어떤식으로 사용되는지 예시
Success example
// GET /posts.json
{
status : "success",
data : {
"posts" : [
{ "id" : 1, "title" : "A blog post", "body" : "Some useful content" },
{ "id" : 2, "title" : "Another blog post", "body" : "More content" },
]
}
}
// GET /posts/2.json
{
status : "success",
data : { "post" : { "id" : 2, "title" : "Another blog post", "body" : "More content" }}
}
// DELETE /posts/2.json
{
status : "success",
data : null
}
Required keys:
- stats: "success"
- data: 반환한 모든 데이터를 감싸는 역할을 한다. DELETE 와 같이 반환되는 데이터가 없으면 null로 설정한다.
Fail example
// POST /posts.json (with data body: "Trying to creating a blog post"):
{
"status" : "fail",
"data" : { "title" : "A title is required" }
}
유효하지 않은(not validates) 데이터 또는 호출 조건으로 인해 API 호출이 거부되면 JSend 오브젝트의 data key에는 일반적으로 유효성 검증 오류의 hash 와 같이 잘못된 사항을 설명하는 객체가 포함됩니다.
Required keys:
- status: "fail"
- data: 요청이 실패한 이유를 제공한다. 이때 실패 이유가 POST vlaues 에 해당하는 경우, response 객체의 Key 는 해당 POST 값에 해당해야 한다.
Error example
// GET /posts.json
{
"status" : "error",
"message" : "Unable to communicate with database"
}
Required keys:
- status: "error"
- message: 무엇이 잘못되었는지에 대한 message가 있고, 최종 사용자가 읽을 수 있는 메시지
Optional keys:
- code: 오류에 해당 하는 상태 코드 (404, 500 ...)
- data: 오류에 대한 정보 (발생된 원인 부분, stack traces ...)