私は数日間RESTについてウェブを読んでいて、HATEOASの概念に苦労しています。
データをリソースとしてモデル化する方法と、リソース間のリンク (状態遷移?) を正しく理解していないため、苦労していると思います。私の問題は、私の経験はすべて OO と RPC であり、リソース中心の考え方に慣れていないことだと思います。
理解を得る唯一の方法は、私の世界から例を挙げ、それがリソース/リンク中心の方法でモデル化されているように見えると思うものを言い、それを放り投げて炎上させることです。書き込みが完了したら、少なくとも自分が理解していないことをよりよく理解する必要があります.
私の(簡略化された)例は次のとおりです。
私は配管工などの請負業者です。私にはいくつかの仕事が割り当てられています。対象の日付範囲などの単純なパラメータを指定して、自分の仕事を検索できます。私は自分に割り当てられた仕事を始めることができます。ジョブを開始するとき、必要に応じて開始時刻を指定するか、今開始する場合は空白のままにすることができます。
これを RPC 方式で実装する場合、呼び出し元に 2 つのメソッドを公開する可能性があります。
ListOfJobs GetJobs(search parameters)
StartJobResult StartJob(jobID, optional start datetime)
ご覧のとおり、オブジェクトと操作を考えています。
リソースとリンクを考えているとしたら、リソースは何でしょうか?
私の推測は次のとおりです。
- 請負業者: ~/contractor/plumbersareus ?
- 求人検索: ~/contractor/plumbersareus/searches/searchidentifier ?
- ジョブ: ~/job/12345 ?
- 出席: ~/job/12345/attendances/attendanceidentifier ?
上記のいずれかが正しいと仮定すると (そして、私はそれが正しいとは思えません)、「searchidentifier」と「attendanceidentifier」は何にすべきでしょうか? 前者は私の RPC ワールドではアイデンティティを持たないでしょう。それは単なるパラメータになります。後者は DateTime によって識別されます。
リンクは何ですか (自分自身へのリンクは無視します)?
- 請負業者: ~/contractor/plumbersareus/searches ?
- 求人検索: ~/job/12345、~/job/12346 など ?
- ジョブ: ~/job/12345/attendances ?
- 出席: ?
これが繰り返しの質問である場合は、申し訳ありませんが、閉じてください。(繰り返しは見つかりませんでしたが、間違った用語で検索していた可能性があります。)