Featured image of post 【目次】Perl API統合パターン(全8回)

【目次】Perl API統合パターン(全8回)

Perl で天気 API を呼ぶところから始め、Adapter と Facade で複数 API をまとめる全8回の連載。目次を兼ねた案内板で、読む順と各回の内容をまとめています。

天気予報 API を Perl で呼ぶのは、1つなら簡単です。ところが2つ目を足した途端、レスポンスの形の違いで if 文が増えていきます。そこから、共通の窓口に揃える、複数の API をまとめて失敗時に次へ回す、キャッシュで呼び出しを減らす、全部落ちても止まらないようにする、と回を追って育てていきます。途中で使う設計に、GoF の Adapter と Facade という名前がつきます。

このページは目次を兼ねた案内板です。通して作るなら「全8回」を順に、特定の困りごとがあるなら「困りごとから探す」から選んでください。

読み方

  • 通して読む: 第1回から順に。コードは前の回の続きで、各回の終わりに次回予告があります
  • 設計パターンだけ知りたい: 第3回(Adapter)と第5回(Facade)です。第2回の破綻の例を先に読むと、なぜ必要かがつかめます
  • 実務で使う部品だけ欲しい: 第6回のキャッシュと第7回の例外処理は、前の回のコードを読んでおくと流れがわかります

全8回

  1. Perl で外部の天気 API を呼びたい。HTTP::Tiny と JSON::PP で最初の1本を動かす
  2. 2つ目の天気 API を足したら if 文だらけになった。何が破綻するのかを確かめる
  3. API ごとに返す形が違って呼び出し側が分岐する。共通の窓口に揃える【Adapter】
  4. Adapter で揃えたのに、呼び出し側のコードがまだ長い。何が残っているのかを整理する
  5. API が落ちても天気を返したい。複数の Adapter をまとめて窓口を1つにする【Facade】
  6. 同じ都市の天気を何度も API に問い合わせている。Cache::LRU と TTL で呼び出しを減らす
  7. 全部の API が失敗したら呼び出し側は undef だらけになる。Try::Tiny と【Null Object】で止まらない設計にする
  8. 天気 API 連携の完成版を読み返す。使っていたのは Adapter と Facade、それと SOLID の関係

困りごとから探す

まず外部 API を呼んでみたい

  • 第1回 — HTTP::Tiny で取得し、JSON::PP で読み取る最小版

2つ目の API を足したら if 文が増えた

  • 第2回 — API ごとにレスポンスの形が違い、分岐と重複が増える様子
  • 第3回 — Adapter で共通のメソッドに揃え、呼び出し側から分岐を消す

呼び出し側が API の管理や失敗時の切り替えを抱えている

  • 第4回 — Adapter だけでは残る、呼び出し側の責任の整理
  • 第5回 — Facade で窓口を1つにし、1つ目が失敗したら次を試すフォールバックを入れる

API の呼び出し回数や遅さを減らしたい

  • 第6回 — 自前のキャッシュに TTL を足し、Cache::LRU に置き換える

全部の API が落ちても止めたくない

  • 第7回 — Try::Tiny で例外を受け、Null Object でデフォルトの天気を返す
  • 第8回 — 完成コードを通して読み、Adapter・Facade と SOLID 原則の対応を整理する
comments powered by Disqus
システム開発・AIワークフローのご相談は Meetsource へ
Hugo で構築されています。
テーマ Stack は Jimmy によって設計されています。