上司に、とある機能ついてはサービスを作らずにリソース API で処理するのが良さそうじゃない?という風に言われた。
ちょっといまいちピンとこなかったので少し調べてみました。
APIって?
httpプロトコルを利用してネットワーク越しに呼び出す API のこと
つまり、機能は分かっているけれども、その中身は詳しくは分からないものを外部から呼び出すための仕様のことを指します。
プロトコルとして http を使うためそのエンドポイントは URI によって指定されることになる。
REST設計の具体例
具体的に実装を行うとしてSymfonyで実装するとして、まずしなければならないのはエンティティとエンドポイント(URI)です。
エンティティを定義したら次にエンドポイントの URI を決定する。RESTではリソース(エンティティの形をしたデータ)のURI が一意になるように決定していく。
サービスとは
複数のリソース(エンティティ)から加工して新たなリソースを生成する。
サービスはビジネスロジックなどの処理をまとめたものでありデータではない。
サービスは複数のリソースを参照し何らかの処理を実行して新たにリソースを生成するがあくまで動的に結果を返す処理に主眼がある。
本来的な作り方を意識するのであれば、サービス(処理の塊)をリソースに無理やりマッピングしようとして、何がしたいのかよく分からなくなってしまう。
サービスの URI がリソースっぽくないことで悩んだりすることもあるのでしょうか。。。
ただし本来的にはAPI を利用する人にとって分かりやすいI/F設計にすべきだということ。
これを解決するために今の会社では、リソースを返す純粋な rest API とサービス API の二つを持つ。