skillup

技術ブログ

アーキテクト設計全般

オブジェクト指向 アプリケーション間連携(主にWebAPI)

投稿日:2017年7月28日 更新日:

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。

本日はプレゼンテーション層、いわゆるMVCのViewにあたる部分。

アプリケーション間連携(主にWEBAPIに関して)

要点

  • アプリケーション間連携の手法は以下の4つ
    ファイル転送
    〇 歴史があり、比較的単純で容易
    × データのやり取りに関して時間差が発生、ファイル形式を変更しにくい
    データベース共有
    〇 即時性
    ×  セキュリティ的な部分で好ましくない、プログラムが密結合、データベースの変更は影響度が非常に大きい
    WebAPI
    〇 広い範囲でのデータのやり取りが必要、データ連携に関しては事実上、標準規格
    ×  設計の自由度が高く、適切な設計判断が難しい、APIの変更が難しい、同期型なので制約になることが多い
    メッセージング
    〇 非同期なので相手の都合に左右されない
    × 比較的設計が困難
  • WEBAPIでは通信方式はHTTP通信、文字コードはUTF8,データ形式はJSONorXML、できることはデータの取得と登録
  • 要求対象はURL、要求の種類はHTTP、処理結果をステータスコードで返し、データはJSONかXMLで。
  • リソース名はスキーム://ホスト名/リソースへのパスが一般的
    例 https://api.example.com/books/1234
  • 要求種類はGET,POST,PUT,DELETE
  • GET句ではクエリパラメータを渡して、対象リソースを取得する
  • POSTとPUTの違いは事前にデータの仕様を知っているか否か(PUTは知っていなければいけないので密結合になる)
  • 一般的にはPOSTのほうがアプリケーション間連携の独立性が高くなる
  • DELETEもアプリケーション間の密度が高くなるため、あまりお勧めできない
  • パラメータの個数が多かったり、データの項目数が多いものは一般論でいえばアンチパターン
  • 基本の設計方針は参照と登録を分ける、リソース(データのかたまり)の単位を分ける
  • 例えば登録時のレスポンスで予約内容を返す、を同時に行うと複雑になるため、登録は登録だけ、そのあと別途参照のAPIを使う
  • 参照でもデータをうまくカテゴライズ化、階層化する

感想

データ連携は現在でいうとやはりAPIが主力だと思いますが、色々な手法の良いところ、悪いところを列挙して整理してあげているとわかりやすいですね。

メソッドはGETとPOSTしか使ったことがありませんでしたが、

一般的には取得(GET)、新規登録(POST)、更新(PUT)、削除(DELETE)でしょうか。LaravelだとすでにこれらがインストールされているのでAPIを作るのが非常に楽です。

 

-アーキテクト設計全般

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

オブジェクト指向 ドメインモデル

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。 本日は主にドメインモデルの考え方について。 Contents1 ドメインモデルの考え方1.1 要点1.2 感想 ドメインモデルの考え …

no image

アプリケーションアーキテクチャについて 〜ドメインモデルに関して〜

前回のトランザクションスクリプトパターンの反省から 今回はいわゆるドメインモデルの具体例に関して。 ドメイン駆動型設計には以下のような特徴があります。 大きく、アプリケーションの構成を以下のように分け …

no image

オブジェクト指向について その3

今回は場合分けによる変更コストとオブジェクト指向のメリットについてです。 例えば給付金が発生して、その金額を死亡時、退職時、通常時で場合分けするとき、if-elseで書けば下記のようになります。 [c …

no image

テストコードの粒度に関して

テストコードを書いていることの悩みの1つにテストコードをどの粒度で書けばいいのか、ということがあります。 例えばバッチの場合、大きく分けると エントリーポイントのFeatureテスト Unitテスト( …

no image

オブジェクト指向設計 単一責任のクラスの設計

オブジェクト指向をするうえでの大事なポイントなど Contents1 単一責任のクラス設計1.1 メモ1.2 実際のコーディング上のコツ1.3 感想1.4 参考文献 単一責任のクラス設計 メモ 単一責 …

アーカイブ