0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

「Webを支える技術」読書メモ#14 Webサービス設計

0
Posted at

本記事の内容
Webを支える技術を読んだ際のノートのようなものです。
省略している部分もあり、書籍の内容を完全に要約するものではありません。

今回は第15〜16章あたりの内容です。

Webサービス設計?

システムの構成と開発手段を決める。
WebサービスとAPIを一体で考えることが良い設計のポイント。

設計とはバランスを取る作業。
なるべくシンプルに、困ったらリソースに立ち返って考える、いざとなればPOSTで何でもできるということを覚えておくとよい。

読み取り専用Webサービス設計

下記を大事にしながら設計すること。

  • アドレサビリティ
  • 接続性
  • 統一インタフェース
  • ステートレス性

キーワード的にはWebの重要な要素で出てきたものたち。

リソース指向アーキテクチャ

  1. 提供するデータの特定

  2. データをリソースに分ける
    機能からリソースに変換する感じ

  3. リソースにURIをつける
    パスの階層でリソースの親子関係を表現する

  4. リソース表現を設計する
    XMLなのか?JSONにするのか?
    URIで拡張子指定をさせてあげるか?などなど

  5. リソース同士の結び付け
    レスポンスにリンクを入れる

  6. イベントの標準コースを決める
    ユーザーの一連の操作を考える

  7. エラーの設計

ざっくりまとめると

どういうデータを、どう分けて、どういうエンドポイントで提供する。
どういう表現で返して、その内容は何で…
という流れで考える感じ。

書き込み可能Webサービス設計

読み取り専用に比べて、書き込み操作がある分難しさが上がる。

下記のような点を考慮する必要がある。

  • 操作がバッティングしたらどうするのか
  • 複数リソースの操作はどうするか
  • 複数の操作手順のかたまりをどうするか

リソース作成

下記の2パターンがある。

  • ファクトリリソースのPOST
  • 直接PUT
    • 更新との区別をしなくていいのは楽
    • URIの仕様をクライアント側が守る必要が生まれる

リソース更新

  • Bulk Update
    • 更新しない要素も含め全てを送信する
    • 通信量が膨大になりがち
  • Partial Update
    • 一部だけを送信する

PUTだとリソースをURIで指定するので、一般的にはPOSTで行う。

バッチ

途中で失敗した場合はステータスコード207
または200を返しておいてBodyなどで独自に内容を返却する。

トランザクション

RESTfulにするにはトランザクションリソースが重要。

リソース状態とセッション状態は別なので、分けて考えよう。

排他制御

操作がバッティングしたときにのためにリソースに対してロックをかけたりするが、悲観的ロックと楽観的ロックがある。

悲観的ロック

ユーザーを信用しない姿勢。
ステータスコードは423 Lockedを返却する。

楽観的ロック

競合したときに考える姿勢。

条件付きPUT/DELETEを使って、変更されてなかったらやるスタイル。
変更されていなければ、ステータスコード412 Precondition Failedを返却する。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?