REST? 愚かなJSON-RPCを取得する





最近、HabréでREST APIを適切に準備する方法について多くの論争がありました。



コメントを怒らせる代わりに、「RESTが本当に必要なのか」と考えてください。

これは意識的な選択または習慣ですか?



おそらく、プロジェクトのRPCに似たAPIの方が適していますか?



JSON-RPC 2.0とは何ですか?

これは、RPC(リモートプロシージャコール)スタイルのAPIを作成するためのシンプルなステートレスプロトコルです。

通常は次のようになります。



次の形式の本体を持つ要求を受け入れるサーバー上に1つのエンドポイントがあります。



{"jsonrpc": "2.0", "method": "post.like", "params": {"post": "12345"}, "id": 1}
      
      





:



{"jsonrpc": "2.0", "result": {"likes": 123}, "id": 1}
      
      





— :



{"jsonrpc": "2.0", "error": {"code": 666, "message": "Post not found"}, "id": "1"}
      
      





!



batch-:



Request:

[
  {"jsonrpc":"2.0","method":"server.shutdown","params":{"server":"42"},"id":1},
  {"jsonrpc":"2.0","method":"server.remove","params":{"server":"24"},"id":2}
]

Response:

[
  {"jsonrpc":"2.0","result":{"status":"down"},"id":1}
  {"jsonrpc":"2.0","error":{"code":1234,"message":"Server not found"},"id": 2}
]

      
      





id



API , .



«» — «id», :



{"jsonrpc":"2.0","method":"analytics:trackView","params":{"type": "post", "id":"123"}},

      
      





, , .

— . , .



RPC-, npmjs.com, :



client.request('add', [1, 1], function(err, response) {
  if (err) throw err;
  console.log(response.result); // 2
});

      
      







-



-, HTTP- URI.



, API .

— -, gamedev, realtime-.







"↑" — , , .



post.like(id)



PUT /posts/{id}/likes



?



CQRS, RPC- API .



-, HTTP , -, .



- 200-, - , HTTP-.



JSON-RPC integer — .



JSON-RPC — ,



.

:
REST RPC
URI ---
GET- ---
HTTP- ---


:
REST RPC
HTTP- ---
HTTP- ---
( ) ( )




POST /server/{id}/status



PATCH /server/{id}



?

. POST /api



.



best practices , .

, .



, REST API . …



, Github API, reactions issue?

Accept: application/vnd.github.squirrel-girl-preview



? , . .



HTTP



, REST API HTTP.

-.



JSON-RPC over HTTP JSON-RPC over Websocket. TCP.

JSON-RPC , .



- (HTTP).



HTTP 404
REST RPC
---
API API








JSON-RPC , :

— Batch-

— ,





, JSON-RPC. — .





HTTP-



API HTTP — RPC .

, , read-only API.

- .



API «» «» — .



access.log



JSON-RPC API - .

.







JSON-RPC swagger.io.

apidocjs.com, .

, API markdown-.



Stateless



«REST»  — ,   HTTP — . .



, , HTTP .



, RPC API. «Stateless».

, , - . .
RPC API -, , .



stateless API, ? - statefull   —  FTP.



: [ TCP-]

: 220 ProFTPD 1.3.1 Server (ProFTPD)

: USER anonymous

: 331 Anonymous login ok, send complete email address as your password

: PASS user@example.com

: 230 Anonymous access granted, restrictions apply

: CWD posts/latest

: 250 CWD command successful

: RETR rest_api.txt

: 150 Opening ASCII mode data connection for rest_api.txt (4321 bytes)

: 226 Transfer complete

: QUIT

: 221 Goodbye.









. FTP- , , , «» .



API , .  .





JSON-RPC 2.0, RPC API HTTP -.

, , , ?



GraphQL, .



gRPC - (), .



REST, . , , .



All Articles