RESTful API是否应该提供整个表单的数据?


13

假设我有一个JavaScript Web应用程序,它完全使用RESTful API来处理数据。

假设此应用程序具有数据表单,并且假设我正在/ product / 12345上编辑一条记录。构建表单时,我向/ product / 12345发出RESTful请求并获取JSON数据:

{
  "id": 12345,
  "name": "Some Product",
  "active": true,
  "sales_user_id": 27
}

因此,我的表单显然可以具有用于选择销售人员的下拉列表。我需要填充此列表。 数据应该从哪里来?最常见的方法是什么?

使其成为/ product / 12345请求响应的一部分有意义吗?

{
  "id": 12345,
  "name": "Some Product",
  "active": true,
  "sales_user_id": 27,
  "sales_users": [
    {"id": 1, "name": "Anna Graham"},
    {"id": 2, "name": "Dick Mussell"},
    {"id": 3, "name": "Ford Parker"},
    {"id": 4, "name": "Ferris Wheeler"},
    {"id": 5, "name": "Jo King"}
  ]
}

创建新记录该怎么办?我的API是否还应通过以下方式响应GET / product / new?

{
  "sales_users": [
    {"id": 1, "name": "Anna Graham"},
    {"id": 2, "name": "Dick Mussell"},
    {"id": 3, "name": "Ford Parker"},
    {"id": 4, "name": "Ferris Wheeler"},
    {"id": 5, "name": "Jo King"}
  ],
  "categories": [
    {"id": 1, "name": "Category 1"},
    {"id": 2, "name": "Category 2"},
    {"id": 3, "name": "Category 3"},
    {"id": 4, "name": "Category 4"},
    {"id": 5, "name": "Category 5"}
  ],
  "etc": [ ... ]
}

不要使用GET请求来创建内容。您的端点应该是/ product 而不是/ product / new。要创建新产品,您应该向该端点发送一个PUT请求。
KeremBaydoğan'16

这没有创建任何东西。这纯粹是对现有数据的请求,或者是新的尚未保存的记录的模板。
乍得约翰逊

哦,对不起,现在我明白你的意思了。无论哪种方式,产品端点都不负责为产品创建表单下拉菜单提供模板产品或值列表。正如@Dan所说,只需创建单独的终结点并使用缓存头,这样您的浏览器就可以缓存下拉值以提高性能。
KeremBaydoğan17年

Answers:


6

我倾向于非常简单,专注的端点。我希望在/ sales_users之类的某个位置能够返回所有销售用户的请求。

GET / sales_users:

[
    {"id": 1, "name": "Anna Graham"},
    {"id": 2, "name": "Dick Mussell"},
    {"id": 3, "name": "Ford Parker"},
    {"id": 4, "name": "Ferris Wheeler"},
    {"id": 5, "name": "Jo King"}
]

同样,如果您要具有类别列表,则可以为此添加一个单独的端点。

GET /类别:

[
    {"id": 1, "name": "Category 1"},
    {"id": 2, "name": "Category 2"},
    {"id": 3, "name": "Category 3"},
    {"id": 4, "name": "Category 4"},
    {"id": 5, "name": "Category 5"}
]

我不会建立GET / product / new。相反,我会在您的应用程序中构建一个表单来处理添加新产品的过程,该产品知道填充其列表的适当请求(例如GET / categories,GET / sales_users等)。


3

假设销售人员列表是相对静态的,我想您希望有一个单独的API调用/salesusers,您可以调用一次(在表单加载等情况下)并保存,这样您就不必每次都重新请求此数据了时间。请记住,在REST中,您是围绕资源来组织API,而销售人员在逻辑上是将资源与产品分开。

同样,在调用时/product/new,您只希望提交新产品的数据,其中可能包括sales_user ID,仅此而已。对sales_user本身的更改将是一个单独的调用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.