- RESTful
- gRPC
- GraphQL
- SOAP
RESTful
RESTの原則に則って構築されたWebシステムのHTTPでの呼び出しインターフェースのこと。
REST
「REST(REpresentational State Transfer)」(レスト)とは、広く普及したWebのインフラをそのまま利用して、簡易な手順でWebサービスへのアクセスを可能にする仕組み。もともとはHTTPプロトコルの設計者の一人でもあるRoy Fielding氏によって2000年に提唱されたものである。
Representational →具象化された
State →状態の
Transfer →転送
RESTの原則
-
クライアント/サーバーの分離:クライアントとサーバーは、それぞれ独立して設計されるべきです。クライアントとサーバーの間のインターフェースには、汎用的な標準プロトコル(HTTPなど)が使用されます。
-
ステートレスな通信:RESTの通信はステートレスであるべきです。すなわち、サーバーは、クライアントからの要求を処理するために必要な情報を保存しないように設計されます。そのため、各要求には、必要な情報が含まれる必要があります。
-
キャッシュ可能なデータ:RESTの通信は、キャッシュを有効にすることができます。クライアントは、キャッシュからリソースを取得することで、ネットワーク通信を減らすことができます。
-
統一インターフェース:RESTの通信には、リソースを一意に識別するURI (Uniform Resource Identifier)が使用されます。また、HTTPメソッド (GET、POST、PUT、DELETEなど) を使用して、リソースに対する操作を表現します。
-
レイヤード・システム:RESTの通信は、分散システムに適したレイヤードアーキテクチャに基づいて設計されるべきです。これにより、各層の変更が他の層に影響を与えず、システム全体を柔軟に拡張することができます。
-
コードオンデマンド (オプション):RESTの通信には、サーバーからクライアントに対して実行可能なコードを返すことができます。これにより、クライアント側に処理を分散することができます。
通常、REST APIは静的なデータ(XML形式やJSON形式(→★))を応答として返却しますが、しかし場合によっては動的なプログラム(Java Appletなど)を返却する事も可能です。
gRPC
Googleが2015年に開発したオープンソースのRPCです。
RPC
RPC(Remote Procedure Call/遠隔手続き呼び出し)とは、ネットワーク上の他端末と通信するための仕組みのことで、これによって他端末のプログラムをリモートで実行することができます。
テキストベースの JSON や XML ではなく、バイナリにシリアル化されたデータでタイプセーフなデータ転送インターフェイスを定義します。また、HTTP/1 よりも信頼性が高く、高速で効率良い HTTP/2 を利用しています。
4つのサービスメソッド
gRPC API には4 種類のサービスメソッドがあります。
- Unary: クライアントはサーバーに 1 つのリクエストを送信し、サーバーは 1 つのレスポンスを返します。
- Client-Streaming: クライアントはサーバーに一連のリクエストをストリーミングし、その後ストリームの終了を示すメッセージを送信します。サーバーは 1 つのレスポンスを返します。
- Server-Streaming: クライアントは 1 つずつリクエストを送信し、サーバーは一連のメッセージをストリーミングしてレスポンスを返します。ストリームは、すべてのメッセージが送信されるか、クライアントが切断されるまで継続されます。
- Bidirectional Streaming: クライアントとサーバーの間に接続が確立され、必要に応じてどちらかがメッセージを送信したり、接続を終了できます。
GraphQL
Facebook(Meta)が開発したAPI向けに作られたクエリ言語およびランタイムです
SOAP
Simple Object Access Protocol
XML のみを使用してメッセージングサービスを提供します。
Microsoftが開発
リクエスト
POST /WebSite1/WebService.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/getHello"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getHello xmlns="http://tempuri.org/">
<str>string</str>
</getHello>
</soap:Body>
</soap:Envelope>
レスポンス
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getHelloResponse xmlns="http://tempuri.org/">
<getHelloResult>string</getHelloResult>
</getHelloResponse>
</soap:Body>
</soap:Envelope>