JSON-RPC

Jmnote (토론 | 기여)님의 2024년 7월 9일 (화) 00:30 판 (→‎구조)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

1 개요[ | ]

JSON-RPC
  • JSON으로 인코딩된 원격 프로시저 호출
  • 원격 프로시저 호출(RPC) 프로토콜의 하나
  • 데이터 교환 형식으로 JSON을 사용하는 경량 프로토콜
  • 매우 간단한 프로토콜(XML-RPC와 매우 흡사함)로서, 소량의 데이터 타입과 명령들만을 정의하고 있다.
  • JSON-RPC는 클라이언트와 서버 간의 통신을 단순화하기 위해 설계되었으며, 다양한 프로그래밍 언어와 플랫폼에서 사용될 수 있다.
  • JSON-RPC는 알림(notification, 서버로 데이터가 전송되고 응답을 요구하지 않음)을 허용하며, 다수의 호출이 서버로 전송되고 순서없이 응답되는 것을 허용한다.

2 특징[ | ]

  • 단순성: JSON-RPC는 단순한 메시지 형식을 사용하여 요청과 응답을 처리한다. 이로 인해 구현이 용이하다.
  • 무상태성: 각 호출은 독립적이며, 서버는 클라이언트의 상태를 유지하지 않는다.
  • 양방향 통신: 클라이언트가 서버에 요청을 보내고 응답을 받을 수 있으며, 서버가 클라이언트에 알림을 보내는 것도 가능하다.
  • 프로시저 호출: JSON 형식의 메시지를 통해 원격 함수나 메서드를 호출할 수 있다.

3 사용[ | ]

JSON-RPC는 이 프로토콜을 구현하는 서버로 요청을 보내는 것에 의해 동작한다. 이 때 클라이언트는 통상 리모트 시스템의 메소드 하나를 호출하려는 소프트웨어이다. 다수의 입력 파라미터가 배열 혹은 객체의 형태로 리모트 메소드로 전달될 수 있고, 메소드 자신은 다수의 출력 데이터를 마찬가지로 리턴할 수 있다. (구현 버전에 따라 다르다.)

하나의 리모트 메소드는 HTTP 혹은 TCP/IP 소켓 (버전 2.0으로 시작하는)을 사용해 리모트 서비스로 요청을 보내는 것에 의해 호출된다. HTTP를 사용할 때는 content-typeapplication/json.[1]로 정의될 수도 있다.

모든 전송 타입은 JSON을 사용해 직렬화한 단일 객체이다.[2] 하나의 요청은 리모트 시스템에 의해 제공되는 특정한 메소드에 대한 호출이다. 이는 다음 3가지의 속성을 포함해야 한다:

  • method - 호출될 메소드의 이름 문자열.
  • params - 정의된 메소드에 대한 파라미터로서 전달될 객체들의 배열.
  • id - 임의 타입의 값. 이것은 요청에 대해 대응되는 응답을 매치시킨다.

요청의 수신자는 모든 수신된 요청에 대해 유효한 응답으로 답해야 한다. 응답은 아래에서 언급한 속성 들을 포함해야 한다.

  • result - 호출된 메소드에 의해 반환되는 데이터. 메소드 호출 중 에러가 발생했다면, 이 값은 null이어야 한다.
  • error - 메소드 호출 중 에러가 있었으면, 특정한 에러 코드. 아니면null.
  • id - 응답하는 요청의 id.

응답이 필요없거나 처음부터 요구되지도 않는 상황들이 있기 때문에, 알림(notification)이 도입되었다. 알림은 id가 없는 요청과 유사하다. 응답이 리턴되지 않을 것이기 때문에 id가 필요없는 것이다. 이 경우, id 속성은 생략(버전 2.0)되거나 null(버전 1.0)이어야 한다.

4 예시[ | ]

4.1 요청[ | ]

{
    "jsonrpc": "2.0",
    "method": "method_name",
    "params": [param1, param2, ...],
    "id": 1
}
→ jsonrpc: 프로토콜 버전, 일반적으로 "2.0"으로 고정된다.
→ method: 호출할 원격 메서드의 이름.
→ params: 메서드에 전달할 매개변수의 배열 또는 객체.
→ id: 요청을 식별하기 위한 고유 ID. 응답과 매칭하는 데 사용된다.

4.2 응답[ | ]

{
    "jsonrpc": "2.0",
    "result": result_value,
    "id": 1
}
→ jsonrpc: 프로토콜 버전.
→ result: 메서드 호출의 결과.
→ id: 요청의 ID와 동일하여 어떤 요청에 대한 응답인지 식별한다.

4.3 오류 응답[ | ]

{
    "jsonrpc": "2.0",
    "error": {
        "code": error_code,
        "message": "error_message"
    },
    "id": 1
}
→ jsonrpc: 프로토콜 버전.
→ error: 오류 정보를 담고 있는 객체로, 오류 코드와 메시지를 포함한다.
→ id: 오류가 발생한 요청의 ID

5 같이 보기[ | ]

6 참고[ | ]

  1. RFC 4627
  2. “specification - JSON-RPC - Trac”. 2008년 5월 17일에 원본 문서에서 보존된 문서. 2008년 5월 14일에 확인함. 
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}