たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

良いAPIを目指す形式たち

概念を削り込んでいったらここまで来てしまった

RESTful API
GraphQL
RPC
gRPC
browser Workers

プログラムから見た外部へのアクセス界面
自由な形式は混乱を産むから、賢いスタイル/形式が考案されてきた

RPC

ローカルに関数を呼ぶのと同様に、別の計算機に対し、関数名と引数を渡せば良い、という設計思想

// 通常の関数呼び出し
const local_result  = localfunc(arg1);
// RPCの理想像
const remote_result = remotefnc(arg2);
// RPCの実像
const rpc_result    = rpc(remotefnc, arg3);

理想像が使えたら最高である。しかし、現実には解くべき問題が無限にある。

funcのバージョンはどうやって指定する?暗示的?Arg1?
argの型制限は? named argは? 可変引数は?
通信プロトコルは? TCP+独自? HTTP?
遠隔計算機の指定方法は?
APIは各言語ごとに用意しなきゃいけないの?
ああああああああぁぁぁぁぁぁ

gRPC

より良いRPCを目指す形式。

RESTful

Webの世界で、よいClient-Server APIを目指したスタイル (規格ではない)
RPCのような手続き/関数中心の考え方ではなく、リソースが中心。
リソース/Entityがまず定義され、そこにURL/URIが割り当てられる。
リソースに対する操作がHTTP Methodsで規定され、アクセスする。
リソースがさき、レスポンスはあと。

GraphQL

Webの世界で、

name partial query one query cache monitoring
GraphQL built-in built-in
REST-Swagger with query (fields param) with good scheme

https://note.mu/konpyu/n/nc4fd122644a1