[戻る]
Java読書会BOF「現場で役立つシステム設計の原則」を読む会 第4回¶
日時 | 2018年11月24日 10:00 - 17:00 |
場所 | 川崎市教育文化会館 第3会議室 |
出席者(敬称略) | 岩室、遠藤、小棚木、平山、井上、常念、吉本、高橋(徹) |
- 本日は、p.225 から読書開始です。
第8章 アプリケーション間の連携¶
アプリケーションとアプリケーションをつなぐ¶
ほかのアプリケーションとの連携がアプリケーションの価値を高める¶
アプリケーションを連携する4つのやり方¶
- 4つの方式のうちWeb APIだけ粒度が細かい具体的な手段となっている。
- メッセージングは、MOM(Messaging Oriented Middleware)や MQ(Messaging Queue)としても知られている。
- メッセージングは、プログラムからみると、Publish/Subscribeな通信を扱える。
- 組込み(IoT)用のメッセージングにMQTTがある。
Web APIのしくみを理解する¶
HTTP通信を使ったアプリケーション間の連携の4つの約束事¶
要求の対象を指定する¶
要求の種類を指定する¶
- パラメータをURIに指定する場合、上限があるので要注意。日本語はエンコー
ドされると1文字が9バイト(%3e%2a%fa とか?)になる。HTTPの仕様には上
限がないが、ブラウザやサーバーで実装依存の上限がある。
- 2000文字を上限とするのが推奨らしい
- 上限を越えたときは、ステータス414が"Request-URI Too Long"
- GETにボディは付けられない
- POSTとPUTの説明は、RFC 7231 に近いものがある。
- HTMLのformでは、GETとPOSTしか扱えないが、裏技あるらしい
- hidden属性に_methodを追加
- 「更新の依頼もPOSTを使う」で、URIにupdateと動詞を指定するのはREST原 理的には相応しくない。
- 現実的にはRESTにしきれずに、URIに動詞を含むRPC的な設計ことがある。
- 削除依頼をDELETEメソッドからPOSTメソッド(URIにdeletionsを追加して)に することで、なぜアプリケーション間の依存関係が小さくなるか分からない。
良いWeb APIとは何か¶
使いにくいWeb API 〜大は小を兼ねるのか?¶
アプリケーションを組み立てるための部品を提供する¶
- 小さいWeb API部品を多数組み合わせるということは、通信コストが高くな る問題があるが、この本では言及されていない
発展性に富んだAPI開発のやり方¶
単純なことをかんたんにできるAPIの提供から始める¶
動かしながら設計を発展させていく¶
- 基本設計段階でWeb APIを作って動かすのは難しいのでは?
- APIの変更管理(構成管理)をしないとカオスとなる
APIを利用する側とAPIを提供する側の共同作業の環境を整える¶
- Swaggerは、YAMLベースでAPI仕様を定義し、ドキュメント、各言語へのバイ ンディング(ソース)が生成される。CORBAのIDLのような位置付け。 この本ではSwagger UIを紹介しているので、この意義が伝わってこない。
- APIの調整(構成管理)にもSwagger UI使えるね(大変だけど)
- Swagger動かす環境はプロキシーが介在する等があると厄介
- チャットサービスは、メールより投稿の敷居が低い、フィードバックがやり やすい(フェースマークやイイネ)
中核となるAPIのセットを設計する¶
- 「登録と参照は別のAPIにする」は、「コマンド・クエリ分離」の設計原則 に相当するようだ。(コマンド・クエリ分離の出所は、メイヤーのオブジェクト指 向入門にたどりついた)
- 登録と参照を分けることでHTTP通信が2回走るのは気になる
- リソースIDだけ返すのではなく、GETのURLを返すHATEOASという概念がある
Web APIのバージョン管理¶
APIを複合したサービスの提供¶
ドメインオブジェクトとWeb API¶
データ形式とドメインオブジェクトを変換する際に起こる不一致¶
導出結果か生データか¶
- ISO 8601の日時形式をパーズできるライブラリは実は多くない。ISO 8601に
対応していないライブラリにISO 8601形式を食わせておかしいと著者は言っ
ている?
- Javaも、Date and Time APIが導入されるまではISO 8601形式のパーズは できなかった
- 著者は日時のタイムゾーンはフォーマットに含めずにAPIの決め事とするこ とを推奨している。しかし、これは誤解の元でありバグの温床となるので、ISO 8601形式とするのが安全性が高いと思う。
- 日付と時刻を分けるのはよい考え方。でないと、クリスマスがタイムゾーン によって12月24日になってしまったりする。