私はWCFサービスの上に座っている、最初の深刻なRESTful APIを設計中です。関連リソースを持つRESTful API
などのリソースがあります。コンセント、スケジュール、仕事。スケジュールは常にアウトレットが所有し、スケジュールには0以上のジョブが含まれます。仕事がスケジュール通りである必要はありません。
私は、リソースがファイルシステム上でアドレス指定されるのと同じタイプの方法でアドレス可能であるべきであると考え続けています。これは私がURIのようなを持っていると思います意味します:
/outlets
/outlets/4/schedules
/outlets/4/schedules/1000/jobs
/outlets/4/schedules/1000/jobs/5123
物事はいえ、さまざまな状況の下でバックリソースをプルする方法を検討する際にかかわらず、厄介始めます。
例えば
(これは今、我々はそれがスケジュール上の背中の仕事をプルする2つの方法を持っている意味)
/outlets/4/jobs/85
:私はスケジュールにない仕事をしたいです
/schedules
または
/outlets/ALL/schedules
は、他のより複雑な要件がたくさんありますが、私はあなたの要点を得ると確信している:私は、コンセントにかかわらず、すべてのスケジュールをしたいです。
ファイルシステムには、リソースをアドレッシングするための、論理的な方法があります。あなたは明らかにシンボリックリンクを作成して、私が記述したものに近いものを達成することができますが、それは面倒です。物事が少しでもより複雑に得ればそれも、このような日付でスケジュールを取得する機能を追加するなど、メシエされます:
/outlets/4/2016-08-29/schedules
とクエリ文字列パラメータを使用せずに、私も、私は戻って要求するだろうかどうかはわかりませんスケジュールにないすべてのジョブ。 unscheduled
がリソースではありませんので、以下は間違って感じている:だから
/outlets/4/unscheduled/jobs
、私は、ファイルシステムタイプのアドレス指定は、サービスだけの最もシンプルなために仕事に行くされていることを考えるように来ている(私たちの基盤となるシステムは、エンティティタイプの数百を持っていますいくつかの非常に複雑な関係と膨大な数の操作があります)。
同じことをする方法が複数あると、混乱と乱雑な文書につながる傾向があり、避けたいのです。私は、使用して展開する必要がありますこれらの非常に単純なアドレス形式から
/outlets/4/schedules/1000/jobs/5123
/outlets/4/jobs/5123
/jobs/5123
:以下第三のような - その結果、私は、ほぼ最小公分母と一緒に行くと非常に単純なアドレス形式を選択を選ぶことを強制していますクエリ文字列パラメータより複雑な何かを行うには、例えば:
/jobs?scheduleId=1000
/jobs?outletId=4
/jobs?outletId=4&fromDate=2016-01-01&toDate=2016-01-31
これまでの考え方「何のドキュメントは必要ありません」から、それはしかしRESTモデルに対して起こっていると、このようなクエリ文字列パラメータは予測できないようにこれは感じています。
OK、クリーンでメンテナンス可能なAPIを手に入れようとしているフェンスの側にいるので、私は非常に単純なリソースアドレスを使用し、クエリ文字列パラメータ広範囲にわたり、良い文書を持っています。
とにかく、これは私が到着したはずの結論のようには感じません。どこが間違っていたのですか?
私はあなたが初期化し、答えの読者を歓迎する方法が好きです:)) – ThomasMX