t※この記事は書きかけでs

近年、GraphQLやgRGCなどの人気が高まっているらしいが、とりあえずそれらプロトコルや他の選択肢について軽く知っておいた方がいいかも🤔

ということで調査してみた。

主要なAPIプロトコル

REST (※プロトコルではなくて設計原則)

Representational State Transfer の略でREST。
RESTは分散システムに適したAPI設計原則の集まりのこと。HTTPプロトコル作成者の一人であるRoy Fieldingによって2000年に提案された。

RESTは主に以下の4つの設計原則からなる:
– ステートレスなクライアント/サーバプロトコル
– すべての情報(リソース)に適用できる「よく定義された操作」のセット
– リソースを一意に識別する「汎用的な構文」
– アプリケーションの情報と状態遷移の両方を扱うことができる「ハイパーメディアの使用」

RESTに則っていることを RESTful といい、そのようなAPIは RESTful API (あるいは REST API)と呼ばれる。
(RESTful API と REST API は狭義的には異なるらしいが、ほぼ同一視して問題ないらしい。)

SOAP

Wikipedia が詳しい。

SOAP(ソープ)は、コンピュータネットワーク内のWebサービスの実装において、構造化された情報を交換するための通信プロトコルの仕様である。拡張性、中立性、独立性を導入することを目的とする。XML-RPCから発展した、XML Webサービスのための、XMLベースのRPCプロトコルである。

メッセージ形式としてXMLインフォメーションセットを使用する。また、メッセージのネゴシエーションおよび伝送はアプリケーション層のプロトコル(多くの場合HTTPまたはSMTP)に依存する。

SOAPにより、全く異なるオペレーティングシステム(例えばWindowsとLinux)上で走っているプロセス間でもXMLを使って意思疎通が可能になる。HTTPのようなWebプロトコルは全てのオペレーティングシステムにインストールされて走っているので、SOAPの仕組みを使えば、クライアントはその言語やプラットフォームが何であれ、ウェブサービスを起動してレスポンスを受け取ることが出来る。

ちなみにSOAPという名前は

元はSimple Object Access Protocolの頭字語とされていたが、現在は「何かの頭字語ではない」とされている。

ということらしい🤔

RESTとの覇権争いに敗れて、今はあまり使われてないと聞いたことがある。

参考

  • [SOAP(プロトコル) — Wikipedia](https://ja.wikipedia.org/wiki/SOAP_(%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB)

GraphQL

あとで概要説明書くよ。

gRPC

あとで概要説明書くよ。

REST の課題と、REST based な規格・プロトコルたち

なぜポストREST APIが求められるのか? REST APIがカバーできない2つの要因とその対策 で述べられているように、RESTには次の問題点がある:
– 実装ルールが統一されていない(規約・プロトコルではない)
– メタデータ・スキーマ情報が提供されていない

RESTとはあくまでも設計原則・思想であり、プロトコルではない。RESTの原則に則ってさえいれば、原則でカバーされてないことについては結構自由に実装できてしまい、妙な仕様のAPIが出来上がってしまうことがある。エンジニアの設計スキルにかなり依存してしまうと言える。

また、RESTful APIにはメタデータ・スキーマ情報を定義する要素はなく、APIがどうのような仕様なのか、どんなURLが用意されているのか、どんなパラメータを渡せるのか、どんなレスポンスが返ってくるのか、それらの情報をAPIから得ることはできない。
その情報を得るにはAPIのマニュアルを見る、ソースコードを解読する、といったことが必要になる。

RESTにはこれらの問題点があるが、それをカバーするのに役立つ仕様定義の標準規格が登場していたり、RESTに則りつつ問題を解消したプロトコルがが登場していたりする。
次に紹介する OpenAPI Specification や OData などがそうだ。

OpenAPI Specification (旧称 Swagger Specification)

OpenAPI Specification(OAS)というのがある。
これは RESTful API の仕様を記述するためのフォーマットであり、Open API Initiative が推進するオープンな規格だ。
単に OpenAPI と言ったとき、OpenAPI Specification のことを指している場合が多い。

Open API Specification での RESTful API 実装をサポートする代表的なツールには以下のものがある:
Swagger Editor: ブラウザで動作するOASのエディター
Swagger UI: OASで記載された仕様をもとに、APIドキュメントをHTML形式で生成するツール
OpenAPI Generator, Swagger Codegen: OASで記載された仕様をもとに、スタブやAPIクライアントを生成するツール

OpenAPI の周辺ツールには “Swagger”の名が付いたものが多いが、これは、OpenAPI Specificationが、もともと Swagger Specification という名称だったためだ。

OpenAPI Specification によって、

参考

OData

OData (Open Data Protocol) は XML形式で、クエリすることができるデータソースのフィールドやKeyのスキーマ情報を確認することが可能。

GraphQL をもうちょっと調査

GraphQLは90%のウェブサービス開発者にはまだ時期尚早ではないか

GraphQL Mesh は何を解決するのか? ~ Qiita API を GraphQL でラップして理解する GraphQL Mesh ~

で、どれを使えばいいのか

GraphQLは90%のウェブサービス開発者にはまだ時期尚早ではないか (再掲)

RESTlessnessに打ち勝つ

マイクロサービスにおけるWeb APIスキーマの管理 ─ GraphQL、gRPC、OpenAPIの特徴と使いどころ

カテゴリー: Survay

hahnah

はーな [hάːnə] Webアプリとモバイルアプリの開発をしてる。 Elm, Swift が好き。

0件のコメント

コメントを残す

メールアドレスが公開されることはありません。