티스토리 뷰

etc

JSend

kingsubin 2021. 3. 24. 16:23

github.com/omniti-labs/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 ...)

'etc' 카테고리의 다른 글

문자 인코딩과 유니코드  (0) 2021.04.18
yaml 설정파일 값 사용하기  (0) 2021.04.01
trailing commas  (0) 2021.03.21
REST API 설계 가이드  (0) 2021.03.19
Forward, Redirect  (0) 2021.03.04