我目前正在设计一个新的 API 和一个使用该 API 的网络应用。
例如,假设我有以下 REST 资源:(使用 spring-boot 微服务):
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 中使用 angular,我想为尽可能接近 REST-API 的相应表单/ View 定义状态/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
这是相当简单的。 但是没有人讨论如何设计嵌套资源。因此,您将如何处理嵌套项资源会很有趣吗?
通常,我想要一个带有 Controller 的嵌套 View 来显示项目,以便项目是 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 和干净的应用程序结构有哪些建议?
最佳答案
我也在寻找类似问题的解决方案。到目前为止我得到的最好的是:
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
关于angularjs - 嵌套 REST 资源的 Angular ui-router 状态名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40884865/