2016-11-30 4 views
1

現在、新しいAPIとそのAPIを使用するWebアプリケーションを設計しています。例えばネストされたRESTリソースの角度ui-routerステート名

、私は以下のRESTリソースを持っているとします(春・ブートmicroserviceを使用して):

GET /orders   // get all orders 
POST /orders   // create an order 
GET /orders/1   // get order with id 1 
PUT /orders/1   // update order with id 1 

GET /orders/1/items // get all order items 
POST /orders/1/items // create an order item 
GET /orders/1/items/2 // get the order item with id 2 of order with id 1 
PUT /orders/1/items/2 // update order item with id 2 of order with id 1 

私は、これは非常に一般的な使用だと思います。私のアプリケーションでは、リソースははるかに入れ子になっています。

私はui-routerでangleを使用しており、REST-APIに可能な限り密接に関係するフォーム/ビューの状態/ URLを定義したいと考えています。 GET、POST、PUTに同じURLを使用することはできないため、これらの状態を定義するための標準(ベストプラクティス)が何であるかを知りたいと思います。

ほぼすべてのテキストは、などのチュートリアルは、CRUDの方法については、以下のURL /状態を使用しています。

/#/orders/    // state: orders 
/#/orders/create  // state: orders.create 
/#/orders/1/show  // state: orders.show 
/#/orders/1/edit  // state: orders.edit 

これはかなり単純です。 しかし、ネストされたリソースを設計する方法については、誰も説明していません。したがって、ネストされたアイテムリソースをどのように処理するかは興味深いでしょう。

通常、アイテムを表示するコントローラーでネストされたビューを持っていて、そのアイテムはorders.show状態の子ステートになります。書籍/チュートリアルで提案されているように、私は同じスキームを使用する場合は

したがって、それは次のURLにつながる:

/#/orders/1/show/items   // state: orders.show.items 
/#/orders/1/show/items/create // state: orders.show.items.create 
/#/orders/1/show/items/2/show // state: orders.show.items.show 
/#/orders/1/show/items/2/edit // state: orders.show.items.edit 

しかし:これらのURLは何とか正しく見ていません。だから、どのような経験と勧告が存在しますか?またはクリーンなURLを取得するための推奨事項は何ですか?したがって、きれいなアプリケーション構造ですか?

答えて

0

また、同様の問題の解決策を探しています。これまでに得た最高のものは次のとおりです:

contacts (abstract, url: '/contacts') 
contacts.list (url: '/', resolve: { contacts }) 
contacts.new (url: '/new') 

contacts.one (abstract, url: '/contacts/:id', resolve: { contact }) 
contacts.one.show (url: '')       # => /contacts/1 
contacts.one.edit (url: '/edit')     # => /contacts/1/edit 
contacts.one.addresses (abstract, url: '/addresses') 
contacts.one.addresses.list (url: '', resolve: { user.addresses }) 
contacts.one.addresses.new (url: '/new')   # => /contacts/1/addresses/new 

contacts.one.addresses.one (abstract, url: '/:id', resolve: { address }) 
contacts.one.addresses.one.show (url: '')   # => /contacts/1/addresses/1 
contacts.one.addresses.one.edit (url: '/edit')  # => /contacts/1/addresses/1/edit 
関連する問題