JSON convention

Posted by yunki kim on July 30, 2021

Client

  클라이언트가 json 문서와 함께 요청을 할때는 다른 Content-Type을 명시 없이 Content-Type: application/vnd.api_json을 명시해야 한다. 클라이언트가 Accept 헤더에 JSON:API media type을 포함한다면 반드시 다른 미디어 타입이 없는 채로 해당 미디어 타입을 적어도 한번 명시해야 한다. 클라이언트는 반드시 응답 문서의 Content-Type 헤더에 수신된 application/vnd.api+json미디어 유형에 대한 파라미터를 무시해야 한다.

Server

  서버는 반드시 다른 Content-Type의 명시 없이 Content-Type: application/vnd.api+json을 명시해서 JSON을 응답해야 한다. 만약 클라이언트가 Content-Type에 application/vnd.api+json과 함께 다른 타입을 명시했다면 415 Unsupported Media Type을 전송해야 한다.

JSON 구조

  하나의 JSON객체는 반드시 모든 JSON:API 요청, 응답의 루트에 위치에 있어야 한다. 이 객체는 하나의 문서의 top level을 결정한다.

  1. 문서는 다음 중 최소 한개의 top-level 멤버를 반드시 가지고 있어야 한다.

      1. data: 해당 문서의 "primary data"

      2. errors: error 객체 배열

      3. meta: 비표준적인 메타 정보를 담고 있는 메타 객체

    data와 errors는 한개의 문서에 공존해서는 안된다

      error object:

        하나의 연산을 실행 할때 발생한 에러에 대한 추가적인 정보를 담고 있다. Error object는 반드시 errors를 키로 하는 배열을 통해            top-level에서 반환되어야 한다.

        하나의 에러 객체는 다음과 같은 멤버들을 가질 수 있다.

  •  id: a unique identifier for this particular occurrence of the problem.
  • links: a links object containing the following members:
    • about: a link that leads to further details about this particular occurrence of the problem.
  • status: the HTTP status code applicable to this problem, expressed as a string value.
  • code: an application-specific error code, expressed as a string value.
  • title: a short, human-readable summary of the problem that SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization.
  • detail: a human-readable explanation specific to this occurrence of the problem. Like title, this field’s value can be localized.
  • source: an object containing references to the source of the error, optionally including any of the following members:
    • pointer: a JSON Pointer [RFC6901] to the associated entity in the request document [e.g. "/data" for a primary data object, or "/data/attributes/title" for a specific attribute].
    • parameter: a string indicating which URI query parameter caused the error.
  • meta: a meta object containing non-standard meta-information about the error.

  2. 하나의 문서는 다음 top-level 멤버들을 가질 수 있다.

      1. jsonapi: 서버 구현을 서술하는 객체

      2. links: primary data와 관련된 링크

      3. included: primary data와 연관된 resource object들의 배열

    만약 문서가 data를 가지고 있지 않다면 include를 사용해서는 안된다.