首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >REST:允许放置以创建嵌套资源

REST:允许放置以创建嵌套资源
EN

Stack Overflow用户
提问于 2018-01-21 03:39:35
回答 3查看 467关注 0票数 0

考虑下面的API,它应该是RESTful

我想要创建UserStores,其中的用户可以是多个UserStores,每个UserStores都可以包含多个用户。

  1. PUT /userStores/store1

使用id store1创建一个空的用户存储,如果它已经存在,什么也不做。

  1. PUT /userStores/store1 -content { "userName":"John", "more":"details" }

使用id store1在用户存储中创建用户,如果该存储不存在,则将创建该存储。如果存储和用户已经存在,则将更新用户详细信息。

  1. GET /userStores/store1

使用id store1列出用户存储区中的所有用户

  1. GET /userStores/store1/John

获取id John存储中具有名称store1的用户的表示形式。

你认为这个API RESTful吗?(遵守其余原则)

( b)在案例1和2中,我根据PUT请求的内容来决定是创建用户存储还是创建用户。你对此有何看法?

c)关于案例2,如果这两种资源都不存在,那么是否可以使用单个UserStore操作创建父PUT资源以及用户资源?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-21 05:00:09

您认为这个API RESTful吗?(遵守其余原则)

不;您使用的方法与HTTP的统一接口不一致。

PUT方法请求创建目标资源的状态或将其替换为由请求消息有效负载中包含的表示定义的状态。

只有在请求中提供的表示与服务器上的资源状态匹配时,PUT才应该是非操作。

给定表示的成功放置将意味着后续的GET在同一目标资源上将导致在200 (OK)响应中发送一个等效的表示。

如果希望创建一个在资源已经存在的情况下不执行任何操作的创建,那么要使用的正确拼写是一个条件PUT,可能使用的是如果-没有-匹配

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT /userStores/store1 -content { "userName":"John", "more":"details" }

这可能不像您想做的那样,正如消息的语义所说的,要更新存储,使John在其中,而没有其他人在其中。

如果您试图添加或更新John而不影响存储中的任何其他用户,那么PUT有错误的语义;您需要帖子补丁

我根据PUT请求的内容来决定是创建用户存储还是创建用户。你对此有何看法?

使用PUT,您要更新URI中指定的资源的语义总是。您的服务器实现需要做的是实现更新,这是它自己的问题-- REST并不关心您的存储是一个包含大量用户详细信息的大型文档,或者是一堆共享外键的用户记录,或者其他什么。这是资源抽象的一部分:客户端没有耦合到服务器的实现。

如果这两种资源都不存在,那么是否可以用一个PUT操作创建父UserStore资源以及用户资源?

这很好。

票数 1
EN

Stack Overflow用户

发布于 2018-01-21 04:05:50

好的,我期望创建存储,或者在使用PUT时覆盖已经存在的存储,如果在存储已经存在时不想发生任何事情,我宁愿使用POST,PUT应该是幂等的,因此:

( a)是的,如果PUT创建或覆盖已有的存储区

( b)如上

( c)是的,但以下是我所说的

票数 0
EN

Stack Overflow用户

发布于 2018-01-21 04:10:37

REST应用于HTTP方法的最佳使用,总是建议使用POST来创建资源。这有两个原因:

  1. 每个对POST方法的请求都会创建一个资源,而该资源是用于此目的的最佳HTTP方法。
  2. 另一方面,PUT是一种幂等请求/响应方法。如果应用程序试图创建系统中已经存在的资源,这将失败。

因此,从定义和实际使用来看,建议使用POST来创建资源,而不是使用PUT

在这个解释之后,回答你的问题:

  1. 根据定义,它不是RESTful API。
  2. 是的,你可以用
  3. 是的,你可以用

但在我看来,您的所有情况都不能完全称为RESTful,您的API需要在基本逻辑本身中进行大量维护!

希望这能很好地回答你的问题!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48366358

复制
相关文章
Impala动态资源池及放置规则使用
Fayson在前面的文章介绍了《如何启用Impala的动态资源池》。管理员可以通过Impala的动态资源池、放置规则及ACL控制不同的用户对Impala资源使用。本篇文章主要介绍如何配置Impala的放置规则,通过一个场景进行描述,在不给作业指定资源池的情况,通过Impala的放置策略将不同的用户提交的SQL分配到不同的资源池中。
Fayson
2018/11/16
4.1K0
使用 ^%REST 例程创建 REST 服务
创建REST服务的推荐方法是从REST服务的OpenAPI2.0规范开始,并使用该规范生成REST服务类。要使用^%REST例程执行此操作:
用户7741497
2022/08/04
7590
android studio 图片资源的放置位置,你中枪了吗?
所以之后的几个项目的图片资源就放到mipmap下面去了。这段时间看google的官方文档的时候,突然发现了这个,原来mipmap下面只是用来放icon的。而.png 、.9.png、.jpg、.gif 的图片资源是放到drawable文件夹下的。多么痛的领悟....  
103style
2022/12/19
1.9K0
android studio 图片资源的放置位置,你中枪了吗?
创建 REST 服务简介
REST 命名自“Representational State Transfer”,具有以下属性:
用户7741497
2022/08/04
5810
使用 %REST.API 类创建 REST 服务
创建 REST 服务的推荐方法是从 REST 服务的 OpenAPI 2.0 规范开始,并使用它来生成 REST 服务类。要使用 %REST.API 类执行此操作:
用户7741497
2022/08/05
1.5K0
ora-00984列在此处不允许_嵌套定义和嵌套调用
嵌套循环中要求每一列都有唯一的列名**,特别注意:空字符串一定要起别名,不然会被当做是相同列明处理.**
全栈程序员站长
2022/11/09
3460
ora-00984列在此处不允许_嵌套定义和嵌套调用
允许主线程创建 Worker 线程
主要用途是与用户互动,以及操作DOM。如果JavaScript是多线程的,会带来很多复杂的问题。Web Worker:为 JavaScript 创造多线程环境,允许主线程创建 Worker 线程,遴选公务员将一些任务分配给后者运行。但是子线程完全受主线程控制,且不得操作DOM浏览器内核中线程之间的关系
用户7737280
2021/12/02
7420
Debian设置允许root用户以ssh方式登录
debian默认不允许以root用户登录,必须以其他用户登录,然后su命令切换到root用户才可以操作 1.修改/etc/ssh/sshd_config文件
流柯
2020/12/22
7K0
23_同时创建父子资源 & 创建资源集合
http://mpvideo.qpic.cn/0bf2qyassaab3eapjq6lqzpvdbwdfgdackia.f10002.mp4?dis_k=3a1d6e9ce931af6abc284df
宿春磊Charles
2022/03/29
3570
SharePoint 2013创建WCF REST Service
SharePoint 2013为开发者提供了丰富的REST API,方便了我们在客户端操作List中的数据。当然我们也可以在SharePoint 2013中创建自定义的REST Service,比如通过REST Service去操作数据库。本篇博客将介绍怎样在SharePoint 2013创建WCF REST Service。 SharePoint 中 创建WCF Service 因为无法在SharePoint 2013 Project中添加WCF Service Template,所以预先创建一个WCF
用户1161731
2018/01/11
9430
SharePoint 2013创建WCF REST Service
ABAP 创建Rest接口实例
创建完后,用T-code:SICF,创建一个服务,在处理器清单中,添加刚才的类,保存激活后,就生成了服务。
惨绿少年.
2022/05/10
6470
ABAP 创建Rest接口实例
给站点创建必应php应用到图片放置处
给站点新建php文件 随意命名 将链接放置在你需要展示图片的位置即可 代码: <?php $str=file_get_contents('http://cn.bing.com/HPImageArch
团团生活志
2022/08/16
3380
以 GitOps 方式管理 Terraform 资源
这是我们希望揭示Flux 生态系统[1]项目的博文系列中的第一篇。这次是Terraform 控制器[2]。
CNCF
2022/11/28
2.4K0
以 GitOps 方式管理 Terraform 资源
如何使用 Spring Boot 创建 REST API ?
Spring Boot 是一个功能强大的框架,可以轻松创建 RESTful API。在本文中,我们将逐步指导如何使用 MySQL 和 JPA 在 Spring Boot 中创建 RESTful API。我们将首先创建一个新的 Spring Boot 项目并根据我们的需求对其进行配置。
用户1418987
2023/10/26
7610
如何使用 Spring Boot 创建 REST API ?
python测试开发django-rest-framework-94.嵌套对象
前面一篇在查询我的收藏的时候,只显示了商品的id和收藏状态,并没有显示商品的详情。如果我们想查询的结果显示商品的详情,需关联到商品表。
上海-悠悠
2021/02/03
7280
python测试开发django-rest-framework-94.嵌套对象
创建资源池租户
Java版云管平台项目中创建资源池租户,南向接口需要对底层的Kubernetes创建namespace的同时创建同名Kubernetes用户。
后端云
2021/10/09
7070
创建 REST API 的最佳入门教程
如果你看到这里,你以前可能听说过API 和REST,然后你就会想:“这些都是什么东西?”。也许你已经了解过一些这方面的知识,但却不知道从何入手。在这个教程中,我将会诠释REST的基础以及如何给应用创建一个API(包括认证授权)。
用户5807183
2019/10/15
3.1K0
创建 REST API 的最佳入门教程
Kubernetes资源创建流程解析
我们知道在Kubernetes集群中apiserver是整个集群的控制入口,etcd在集群中充当数据库的作用,只有apiserver才可以直接去操作etcd集群,而我们的apiserver无论是对内还是对外都提供了统一的REST API服务,包括一个8080端口的非安全服务和6443端口的安全服务。组件之间当然也是通过apiserver进行通信的,其中kube-controller-manager、kube-scheduler、kubelet是通过apiserver watch API来监控我们的资源变化,并且对资源的相关状态更新操作也都是通过apiserver进行的,所以说白了组件之间的通信就是通过apiserver REST API和apiserver watch API进行的
mikelLam
2022/10/31
6380
Kubernetes资源创建流程解析
c++ const放置的位置
标准中int const a 与 const int a 是完全等价的。正因为如此,会有很多各种不同的风格,同样的还有“*是跟类型还是变量?”,比如char* p与 char *p,它们是等价的。
meteoric
2018/11/19
1.9K0
Yarn管理放置规则
这是CDP中Yarn使用系列中的一篇,之前的文章请参考<使用YARN Web UI和CLI>、<CDP 中配置Yarn的安全性>、<CDP的Yarn资源调度与管理>、<CDP中Yarn管理队列>、<Yarn在全局级别配置调度程序属性>和<Yarn配置每个队列属性>。
大数据杂货铺
2021/09/15
2.1K0
Yarn管理放置规则

相似问题

REST创建资源和嵌套资源最佳实践

10

嵌套REST资源

10

REST -使用单个帖子创建嵌套资源

20

以父形式创建嵌套资源

20

REST和嵌套资源

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文