Morning Girl

Web API, Windows, C#, .NET, Dynamics 365/CRM etc..

Java クライント開発における Web API の実装アプローチ まとめ REST vs GraphQL vs Swagger vs OData

f:id:sugimomoto:20190124172011p:plain

最近作成してきた、Java クライント開発における Web API の実装アプローチのまとめ記事です。

初めての試みでしたが、私自身多くの発見があり、とてもいいナレッジになったのではないかなと思っています!

この記事では、まとめとして総括した内容を中心にお伝えしますが、是非以下の記事郡を見てほしいと思います。

タイトルでは vs なんてことを書いていますが、それぞれの特徴を把握してもらうことを目的としています。

各記事の一覧

Java クライント開発におけるWeb API の実装アプローチ:その1 Web API を活用する上で意識したい APIエコシステム - Morning Girl

Java クライント開発における Web API の実装アプローチ:その2 一般的なREST API編 - Morning Girl

Java クライント開発における Web API の実装アプローチ:その3 Swagger(OpenAPI)Code Generate 編 - Morning Girl

Java クライント開発における Web API の実装アプローチ:その4 OData 編 - Morning Girl

Java クライント開発における Web API の実装アプローチ:その5 GraphQL 編 - Morning Girl

Java クライント開発における Web API の実装アプローチ:その6 CData Driver編 - Morning Girl

REST・Swagger・OData・GraphQL比較表

あまりマルバツ表は好きではないのですが、改めてそれぞれの特徴をまとめました。

REST を比較するのはあまりにも難儀ですが、ここからも「結局の所 REST はデザインパターンである」ということが明確にわかるのではないかなと思います。

あまり意図してつけたわけではないのですが、思ったよりもそれぞれの長所・短所がはっきりする結果になったのではないかなと思います。

f:id:sugimomoto:20190124170655p:plain

Swagger・OData・GraphQL それぞれを使ってみた所感

Swagger

f:id:sugimomoto:20190119212047p:plain

Code Generate で生成した Client SDKの使いやすさはピカイチでした。現在公開されている API を右肩あがりですので、知っておいて損は無い仕様だと思います。

ただ、ドキュメントのアップデートに気を使っているかどうかは、そのプロバイダーにかかっていますし、メタデータは Swager の記述アプローチ次第なところもあるので、その辺を注意しながら使う必要はあると思います。

OData

f:id:sugimomoto:20190121012145p:plain

スキーマやリクエストのコントロールのアプローチは確立されていますが、アーキテクチャとしての複雑さ、使う敷居の高さは若干否めません。

ただ、Salesforce・Dynamics 365・SAP などが OData で API を提供しているため、エンタープライズ領域としては把握しておいて損は無いでしょう。

特に、ツールやサービスとの接続には依然多く利用されるシチュエーションに溢れているため、この点を知っているかどうかで、選択肢の幅は大きく変わります。

GraphQL

f:id:sugimomoto:20190124171559p:plain

上でも述べた通り、Java Client から使う、となるとまだまだ敷居の高さは否めません。

実際のところ Java で使うよりも、React といった Java Script系クライアントライブラリで利用する、というシチュエーションの方が、現在は多いと思います。

しかしながら、Github や Shopify がパブリックなAPIを公開したところを見るに、これからエンタープライズ領域でも見かけるシチュエーションは多くなるのではないでしょうか。

Microsoft も一部ベータ的に GraphQL API を公開し始めましたし、今後ウォッチしておく価値はあると思います。

最後に。なぜ開発者が API のエコシステムを理解しておくことが大事なのか?

おそらく Swagger と GraphQL が出てきたタイミングから Web API(REST)の捉え方は変わってきています。

ただ Web API(ないしREST)として、それらに接することはあまりにも脆弱になってしまったのだと思います。

Swagger で CodeGenerate することを知らなければ、クラス名を一から記述することになり

OData で Metadata を取得することを知らなければ、動的なアプリケーションは作りづらい

仕様であることを理解しているだけで、開発者が取れる選択肢は格段に多くなります。

そして、それが適切かつ保守しやすい開発に繋がることは間違いないでしょう。

API を実装する側ではないからといって、API エコシステムを疎かにしてはいいわけではない理由がここにあると思います。

是非、各仕様・エコシステムを理解してもらいながら、開発に役立ててもらえたらなと思います。