t0mmy

2020年12月30日に参加

学習履歴詳細

APIデザインパターン 11章 再実行可能ジョブ 読了

やったこと

  • APIデザインパターン 11章 再実行可能ジョブ 読了

学んだこと

ポイント

  • ジョブとは
  • ジョブの恩恵
  • ジョブの作成と実行
  • Executionリソースとは

学び

  • ジョブとは、よくある「関数による何らかの処理の実行」を、以下の2ステップに分けたもの
    1. 「ジョブ」という処理単位を作成
    2. 「ジョブ」を実行する
  • 上記2ステップにわけたことで、様々な恩恵が得られる
  • ジョブは、重たい処理を想定し、実行結果をLROとして扱う
    • LROなので生存期間が存在する
    • ジョブの実行結果の生存期間を、LROに引っ張られたくない場合は、Executionリソースを定義する
  • Executionリソースは、ジョブ実行結果のコレクションであり、LROとは別に生存期間を設定できる
  • 「ジョブ」リソースも、Executionリソースも、れっきとしたリソースなので、標準メソッドを実装して扱いやすくすると良い

メモ

焦点は、「カスタマイズ可能で、何度でも実行できる機能の実装」

対象とする問題

LROでは解決できない、以下のシナリオ。

  • 非同期実行を行う、あれこれカスタム可能なメソッドの提供
    • 設定可能なパラメータが増えるにつれ、パラメータ管理が非常に難しくなる
    • このパラメータをAPIに保存できると、非常にありがたい
  • 認可を、「APIを呼び出すことができる」と「特定のパラメータを設定できる」の二つで制御
    • 「利用者Aは、この設定でしかAPIを呼び出せない」といった制御は難しい
  • cron のように、定期的に実行したい場合
    • 加えて、cronのような別のシステムではなく、APIの機能としてスケジューリングしたい場合

まとめると、以下をAPIの機能として提供したい。

  • 設定パラメータを保存できる
  • 必要に応じて(可能であればスケジューリングで)再実行可能

概要

上記「対象とする問題」を解決するために、【ジョブ】(リソースの「ジョブ」と紛らわしいので以降ジョブパターン)という概念を使用する。

ジョブパターンは、実行したい処理を「ジョブ」という単位で扱う。
システムは、以下の二つのステップで「ジョブ」を処理する
1. 任意の設定を入力しつつ、「ジョブ」を作成する
2. 「ジョブ」を実行する
- WebAPIでは、Jobというリソースに対して、runカスタムメソッドを呼び出す形で「ジョブ」の実行をリクエストする

ジョブパターンを用いることで、以下の恩恵を得ることが出きる。

  • 処理の実行に必要な各種設定を、「ジョブ」作成時にのみ行うだけでよい
    • パラメータの設定は「ジョブ」作成時に一度だけ行うだけで、以降管理の手間が減る
  • 処理を再実行しやすくなる
    • ステップ1で作成したジョブを実行するだけでよい
  • 「ジョブを作成する権限」と「ジョブを実行する権限」を分離できる
    • これにより、これらの認可を制御できる

実装

「ジョブ」リソースを定義し、「ジョブ」リソースに沿って作業を実行できる run メソッドを定義する。

「ジョブ」リソース

設定パラメータと、一意の識別子をもつ。

runカスタムメソッド

実行したい「ジョブ」リソースの識別子を受け取り、識別子に対応した「ジョブ」リソースに沿って処理を実行する。

ジョブパターンで実行したい処理は、重たい処理を想定してLROとして扱う。
この時、ジョブの実行結果もLROリソースとして扱うため、LROの生存期間という制約を受ける。
ジョブの実行結果を、LROの生存期間に縛られずに保持したい場合は、Executionリソースを使用する。
(そして、LROは、Execitonリソースの参照を返す)

◇Executionリソース

runカスタムメソッドの実行結果のコレクションを保持するコレクション。
LROとは異なる生存期間を設定できる。
一つのExecutionリソースは、一つのジョブに紐づく。
そのため、Executonリソースは、紐づくジョブの配下で管理すると良い。

「ジョブ」リソースも、Executionリソースも、れっきとしたリソースなので、標準メソッドが必要。


取り扱うこと

  • 再実行可能なジョブとは
  • LROとの違い
  • 再実行可能ジョブをリソースとして表現する方法
  • LROと比較した、再実行可能ジョブの利点
  • ジョブの実行結果をジョブ実行リソースで表現する方法

まとめ

  • 再実行可能なジョブは、あるタスクを設定できる利用者と、同じタスクを実行できる利用者を分離できる、優れた選択肢
  • ジョブは、最初に作成され、設定されるリソース
    • ジョブは、runカスタムメソッドを実装を使用して実行されることがある
  • ジョブが既存のリソースを操作したり作成したりしない場合、Jobリソースの実行結果は、Executionリソースになる
    • Executionリソースは読み取り専用
    • 明示的な更新や作成は出来ない
WebAPI

2023年06月15日(木)

1.0時間