在什么情况下客户端应该为 REST URI 选择唯一的资源 ID,而服务器应该在什么情况下指定它?

发布于 2024-11-14 10:08:56 字数 201 浏览 0 评论 0 原文

看起来我可以通过两种方式创建 REST API。我可以使用 POST 创建用户而不指定 URI,它将创建用户并返回 URI,或者我可以使用 PUT 创建用户并指定 URI本身

什么时候应该使用其中一种而不是另一种?这里的关键区别在于,在一种方法中,我的系统决定资源的唯一 ID 和 URI 应该是什么,而在另一种情况下,他们在我创建时指定它应该是什么。

It looks like there are two ways I can make my REST API. I can have users created with a POST without specifying the URI and it will create the user and return the URI OR I can have the create the users with a PUT and specify the URI themselves.

When should one be used over the other? The key difference here is that in one method MY system is deciding what the unique ID and thus URI for the resource should be, in the other situation THEY are specifying what it should be when I create.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

樱娆 2024-11-21 10:08:56

这基本上取决于您是否愿意将资源命名的控制权交给客户端。

最大的问题就是处理冲突(如果我 PUT /photo.png 而你 PUT /photo.png,可以吗?)。

回答这些问题,你就上路了。

It basically comes down to whether you are willing to cede the control of resource naming to the client.

The biggest issue simply being dealing with conflicts (If I PUT /photo.png and you PUT /photo.png, is that OK?).

Answer those questions, and you're on your way.

眼泪淡了忧伤 2024-11-21 10:08:56

当您的用户指定资源 ID 时,他们可以 PUT 到 URI;他们执行 PUT 的 ID 是资源 ID 的规范。

当您指定资源ID时,它们可以POST到父/组的URI;您的系统将为资源分配一个 URI,并将其返回给客户端,以便他们可以引用其创建的资源。

When your user is specifying the resource ID, they can PUT to the URI; the ID that they are performing the PUT to is the specification of the resource ID.

When you are specifying the resource ID, they can POST to the URI of the parent / group; your system will assign a URI to the resource, and return that to the client so they can reference their created resource.

要走干脆点 2024-11-21 10:08:56

这个问题的答案取决于两个更具体的问题:

  • 客户端是否知道要创建的资源的位置? (例如,如果通过用户的名称而不是服务器分配的 ID 来访问用户,则可能会出现这种情况。)
  • 客户端是否拥有要创建的资源的完整表示? (如果资源的某些部分是由服务器计算的,则情况可能不是。)

如果这两个问题的答案都是“是”,那么 PUT 可能是合适的。如果您对其中任何一个问题的回答都是“否”,那么您应该坚持使用 POST。

The answer to this question hinges on two more specific questions:

  • Do clients know the location of the resource to be created? (This might be the case if, for instance, users are accessed via the name of the user rather than a server-assigned ID.)
  • Do clients have a full representation of the resource to be created? (This might not be the case if some portion of your resource is computed by the server.)

If the answer to both of those questions is 'yes', then a PUT is probably appropriate. If you answered 'no' to either, then you ought to stick with a POST.

时间海 2024-11-21 10:08:56

我可以通过 POST 创建用户
不指定 URI,它将
创建用户并返回 URI 或
我可以使用以下命令创建用户
PUT 并指定 URI 本身

什么时候应该使用一个
其他?

使用第一个。

在 RESTful HTTP 中,客户端应该永远构造 URI。服务应该连接良好,这意味着客户端应该只遵循服务器给出的 URI 并向这些 URI 发出请求。

它在客户端和服务器之间建立了更好的分离,并且可以更轻松地更改服务而不破坏现有客户端。

(是的,很多现有的 API 都犯了这个错误)

Fielding 发表了一篇与此主题相关的非常好的文章:

http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven

I can have users created with a POST
without specifying the URI and it will
create the user and return the URI OR
I can have the create the users with a
PUT and specify the URI themselves.

When should one be used over the
other?

Use the first.

In RESTful HTTP the client should never construct URIs. The service should be well-connected, which means that the client should only ever follow URIs given by the server and make requests to those URIs.

It creates better separation between the client and server, and makes it easier to make changes to the service without breaking existing clients.

(And yes, lots of existing APIs get this wrong)

There's a really good post by Fielding related to this topic here:

http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文