0

ユーザーがウィジェットとウィジェットを含むタブを作成できるようにする Web サイト用の RESTful API を構築しています (igoogle.com/netvibes.com を考えてください)。洞察のために私の URL 設計を共有したいと思います。

簡単なルールは次のとおりです。

  1. ユーザーが選択できる widgetTypes の静的リストがあります。

  2. ユーザーは、各 widgetType の 1 つ以上の widgetInstances を作成できます。

  3. ユーザーは、widgetInstances を含む 1 つ以上のタブ/ダッシュボードを作成できます

この API は、JavaScript によって消費される JSON のみを提供する必要があります。また、すべての認証が Cookie によって処理されると想定することもできます。

API は以下を提供する必要があります。

  1. ユーザーのタブの CRUD

  2. 特定のユーザー widgetInstances の CRUD

  3. ユーザーのすべてのタブの取得

  4. 特定のタブのすべての widgetInstances の取得。

  5. ユーザーがウィジェットを追加するために使用できるすべての widgetTypes の取得。

デザイン:

タブ コントローラ:

widgetAPI.com/tabs -> ユーザーが使用できるすべてのタブのメタ データ (ID、タイトル) を返します。

widgetAPI.com/tabs/1 -> タブ ID 1 のメタデータ (タイトル) を返します。POST で送信された場合、タブ ID 1 を更新します。

widgetAPI.com/tabs/1/widgets > タブ ID 1 のすべての widgetInstances を返します。

質問 1:理想的には、指定されたタブのすべての widgetInstances も返す widgetAPI.com/tabs/1 の設計に従いたいと思いますが、その設計では、widgetAPI.com/tabs が返さなければならないほど多くのデータが返される可能性があります。すべてのタブのすべてのウィジェットを返します。したがって、別の「widgetAPI.com/tabs/1/widgets」URL を作成する必要がありますが、メタデータとウィジェットを取得するために 2 つの HTTP 呼び出しを行いたくないため、タブのメタデータも返す必要があります。ここで最善のアプローチがわからないので、アドバイスしてください。

widgetAPI.com/tabs/create -> 新しいタブを作成

widgetAPI.com/tabs/delete/123 -> tabid 123 を削除

ウィジェット コントローラー:

widgetAPI.com/widgets/123 -> widgetInstanceId 123 のデータを返します。POST 経由で送信された場合は 123 を更新します。

widgetAPI.com/widgets/Create?typeID = 2 -> typeid = 2 の新しい widgetInstance を作成します。これは POST リクエストのみになるため、typeId は post パラメータである可能性があります。

widgetAPI.com/widgets/delete/123 -> widgetInstance 123 を削除

質問 2では、まだ満たすことができていないルールが 1 つあります。利用可能なすべての widgetTypes を返す必要がありますが、この要求を前の 2 つのコントローラーに適合させる方法がわかりません。私は現在、これを個別に提供することに傾いています。widgetAPI.com/getWidgetTypes のようなものです。考え?

みんなありがとう。RESTful アプリを設計するのはこれが初めてなので、全体的な設計について批評したり、質問に答えたり、気を付けるべきことを述べたりしていただければ幸いです。再度、感謝します。

4

1 に答える 1

2

widgetAPI.com/tabs/1 -> タブ ID 1 のメタデータ (タイトル) を返します。POST で送信された場合、タブ ID 1 を更新します。

上記の URL への POST は、タブ 1 を更新すべきではありません。その URL への PUT は、タブ 1 を更新する必要があります。

widgetAPI.com/tabs/create -> 新しいタブを作成

新しいタブを作成するには、widgetAPI.com/tabs に POST する必要があります

widgetAPI.com/tabs/delete/123 -> tabid 123 を削除

タブ 123 を削除するには、DELETE を widgetAPI.com/tabs/123 に送信します。

widgetAPI.com/widgets/123 -> widgetInstanceId 123 のデータを返します。POST 経由で送信された場合は 123 を更新します

ウィジェット 123 を更新するには、PUT を widgetAPI.com/widgets/123 に送信します。

widgetAPI.com/widgets/Create?typeID = 2 -> typeid = 2 の新しい widgetInstance を作成します。これは POST リクエストのみになるため、typeId は post パラメータである可能性があります。

新しいウィジェットを作成するには、POST を widgetAPI.com/widgets に送信します。typeId は POST リクエスト本文の一部である必要があります。

widgetAPI.com/widgets/delete/123 -> widgetInstance 123 を削除

ウィジェット 123 を削除するには、DELETE リクエストを widgetAPI.com/widgets/123 に送信します。

回答 1:widgetAPI.com/tabs/1/widgets URL のデザインが気に入っています。また、メタデータとデータに対して 2 つの別々の呼び出しを行うというアイデアも気に入っています。

回答 2:別のコントローラーでこれを行う必要があると思います。URLが気に入らない。代わりに、HTTP GETwidgetAPI.com/widget-typesまたは単にwidgetAPI.com/widgettypes.

原則として、クライアントが URL 識別子を作成できるようにする場合を除き、次のパターンに従います。

URL: /whatever-resource GET - このタイプのすべてのリソースを返します POST - 新しいリソースを作成します

URL: /whatever-resource/{id} GET - その ID を持つ単一のリソースを返す PUT - その ID を持つリソースを更新する DELETE - その ID を持つリソースを削除する

リソースを作成するために /whatever-resource/{id} への PUT リクエストを許可することもできますが、クライアント/ユーザーは ID を指定する必要があります (URL には ID が含まれているため、暗黙的に URL を指定する必要があります)。ユーザーにこれを提供させたくないが、サーバーに生成させたい場合は、/whatever-resource に POST してリソースを作成します。

于 2012-11-02T12:54:40.370 に答える