首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用超媒体链接时如何处理对REST资源的更新

使用超媒体链接时如何处理对REST资源的更新
EN

Stack Overflow用户
提问于 2013-03-14 09:13:15
回答 2查看 1.2K关注 0票数 4

我正在运行一个REST,其中的资源是相当相互关联的。资源相互引用,这些引用可以创建或删除。当资源使用超链接相互引用时,我有点不确定如何支持将资源关联在一起。

下面是一个简单的例子,其中有两个资源,A和B。

资源A:名称:整数list_b:资源列表B资源B: id:整数描述:字符串

现在,A不包括它的文档中的B,而是链接到它。当使用超媒体时,它可能如下所示:

资源A:{ id: 1,list_b:{ id: 1,href:"https://server/api/b/1“},{ id: 2,href:"https://server/api/b/2”}}

如果用户想要添加或删除A的列表中的B引用之一,他们如何做到这一点,同时考虑到超链接的存在?我希望用户能够在一个PUT操作中更新整个A资源,但是输出中的任何内容都不能指示B需要哪个值。对于我来说,用户使用如下内容执行PUT是有意义的:

资源A:{ id: 1,list_b:{ id: 1,href:"https://server/api/b/1“},{ id: 2,href:"https://server/api/b/2”},{ id: 3 },}

并接收更新的资源(响应中),如下所示:

资源A:{ id: 1,list_b:{ id: 1,href:"https://server/api/b/1“},{ id: 2,href:"https://server/api/b/2”},{ id: 3,href:"https://server/api/b/3“}}

我担心的是,当更新资源A的list_b时,用户不一定知道在资源中包含什么。

当处理从一个资源到另一个资源的超链接时,应该如何创建和更新?应该允许客户端更新链接的一部分( id),还是应该要求他们更新链接的两个部分?

注意:我知道另一种方法可能是公开资源A的子url。它可以将list_b公开为可通过操作的资源(允许客户端使用列表资源本身的POST、PUT和DELETE )。但是,当A包含对其他资源类型的多个引用时,这似乎不太合理。每个引用另一个字段的字段都可能需要一个子url,如果存在10+字段,则该子url很难处理,并且需要多个HTTP请求来更新资源。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-14 10:02:43

HATEOAS在RESTful接口中将资源连接在一起,这里不清楚您所描述的附属对象作为独立资源是否真正有意义。HATE美洲组织的" as“部分提醒我们,Web页面在Web应用程序中扮演”资源“的角色。每个Web页面实际上是应用程序状态的交互式表示(本例中的“应用程序”是一个经典的、多页的Web应用程序),指向其他资源的超链接为用户提供到其他应用程序状态的转换。

RESTful Web以JavaScript代码而不是人作为客户端,自然是面向数据访问的,所以它的资源很少采用“应用程序状态”的形式。在传统的Web应用程序中,您可以绘制状态转换图,清楚地看到状态之间的连接,从而查看资源之间的连接。在RESTful API中,被动数据资源之间的边界更多地是由客户机/服务器交互的效率和其他微妙的力量驱动的。

那么,这里的附属对象("B")真的需要表示为一流的资源吗?是否存在前端将枚举或以其他方式访问它们的实例,而不依赖于它们参与的聚合("A")?

如果答案是“否”,那么它们显然不应该在"A“结构中用简单的文字来表示。不过,我想答案是“是的”,你也有充分的理由提供你称之为独立资源的所有其他附属目标。在这种情况下,无论什么情况,都有一些路由和控制器形式的接口工作是支持所有这些资源所必需的,因为您的应用程序可能提供了一种单独操作它们的方法,或者至少是通过超链接(例如示例中的超链接)来查询它们。

在这种情况下,在表示"B“对象集合(例如,"server/api/b")的路径上的POST可以返回响应的"location”头值中的URL,因为创建新资源的帖子应该这样做。当您的用户交互地将一个新的"B“添加到您的网页上属于"A”的列表中时,您的前端可以首先发布新的"B“,并在成功的情况下通过location返回其URL。然后,在PUTting更新的"A“之前,它可以将该链接合并到其”A“对象内的列表表示中。

ID值有点麻烦,因为您可能会试图通过从URL文本中提取ID值来打破后端的封装。真正的HATEOAS狂热者使他们的RESTful API产生混淆、散列或其他无法理解的URL,专门用来阻止客户端的这种封装破坏。更好的做法是,新"B“对象的POST在其响应主体中返回新的"B”对象的完整表示形式,包括其ID,以便客户端能够重新构建完整的对象并从中提取ID,从而缩小到资源本身的耦合范围,而不是将获取该对象的RESTful接口的细节缩小。

票数 2
EN

Stack Overflow用户

发布于 2013-05-29 05:05:30

您还应该查看 method

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
LINK /ResourceA/1 HTTP/1.1
Link: <http://example.com/ResourceB/3>; rel="list_b"
...

204 Yeah Fine, Whatever

这告诉/ResourceA/1使用"list_b“关系链接到/ResourceB/3。

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

https://stackoverflow.com/questions/15415834

复制
相关文章
PSR-13 超媒体链接
在 HTML 和各种 API 格式的上下文中,超媒体链接已经变成 Web 越来越重要的一部分。然而遗憾的是,没有一种通用单一的超媒体格式,也没有一种通用的方式来表示链接间的格式。 该规范旨在为 PHP 开发人员提供一种简单的、通用的方式来表示一个独立于所使用的序列化格式的超媒体链接。 这反过来又允许系统将超媒体链接的响应序列化为一种或多种有线格式,而不依赖于决定这些链接应该是什么的过程。
mousemin
2023/06/10
1880
如何使用SpringMvc处理Rest异常
若你的项目中已经在使用spring,然后你又需要提供rest接口,那么springmvc是一个不错的选择。
Java知音
2018/09/28
1.3K0
client-go实战之八:更新资源时的冲突错误处理
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 系列文章链接 client-go实战之一:准备工作 client-go实战之二:RESTClient client-go实战之三:Clientset client-go实战之四:dynamicClient client-go实战之五:DiscoveryClient client-go实战之六:时隔两年,刷新版本继续实战 client-go实战之七:准备一个工
程序员欣宸
2023/02/13
1.1K0
client-go实战之八:更新资源时的冲突错误处理
[Go] 使用读写锁对map资源进行安全处理
当需要有一个全局性的map集合资源进行增删改数据时,需要对该map资源增加读写锁,防止并发时出现安全问题
唯一Chat
2019/12/26
6780
基于场景选择微服务的API范式:REST、GraphQL、Webhooks和gRPC
原题:When to Use What: REST, GraphQL, Webhooks, & gRPC
yuanyi928
2018/10/23
2.6K0
基于场景选择微服务的API范式:REST、GraphQL、Webhooks和gRPC
译:如何使用Spring优雅地处理REST异常
本文将举例说明如何使用Spring来实现REST API的异常处理。我们将同时考虑Spring 3.2和4.x推荐的解决方案,同时也会考虑以前的解决方案。
烟雨平生
2023/03/07
1.2K0
译:如何使用Spring优雅地处理REST异常
我们应该重新定义REST吗?
作者 | Kieran Potts 译者 | 王强 策划 | 蔡芳芳 在这篇博文中,我会讨论为什么我们应该淘汰“REST API”这个术语。相比之下,我们应该改用“HTTP API”和“hypermedia API”这两个说法,使用它们可以更好地区分两种不同的 Web 服务编程接口设计。 本文最初发布于 kieranpotts.com 网站,经原作者授权由 InfoQ 中文站翻译并分享。 假设你要为一个新的 Web 服务设计 API。 你会从哪里开始呢? 高层级别上,你会考虑哪种通用的 API 风格(RES
深度学习与Python
2023/04/01
6620
我们应该重新定义REST吗?
Mybatis 查询时对通配符的处理
Mybatis、MongoDB 或者 Solr 引擎在查询数据的时候,如果存在%_等通配符时,这些特殊符号都不会被作为字符串进行搜索,会导致查询不出数据或者查询出来的数据是不准确的,这个时候就需要对特殊字符进行转义。
chenchenchen
2021/09/06
6.4K0
RESTful 架构详解
REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。 它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:"我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。REST指的是一组架构约束条件和原则。" 如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。
菲宇
2019/06/13
9860
RESTful 架构详解
如何对所有图片批处理?批处理时应当注意什么?
很多制图人员或者图片编辑人员,在工作的时候经常需要把同一批图片处理成同样的大小或者是同样的色调。如果是单张图片的去编辑和更改的话,会特别的耗费工作人员的时间。因此现在有一些制图软件早就有了对图片批量处理的功能。现在来了解一下,如何对所有图片批处理呢?
用户8715145
2021/12/30
9080
RESTful架构详解 转
REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。 它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:“我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通 信的架构。REST指的是一组架构约束条件和原则。” 如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。
henrylee2cn
2019/04/04
8500
RESTful架构详解
                                                                            转
[解读REST] 5.Web的需求 & 推导REST
衔接上文[解读REST] 4.基于网络应用的架构风格,上文总结了一些适用于基于网络应用的架构风格,以及其评估结果。在前文的基础上,本文介绍一下Web架构的需求,以及在对Web的关键协议进行设计和改进的过程中遇到的问题;以及在对基于网络应用的架构风格进行评估的过程中的领悟;结合Web的需求进而推导出REST这种架构风格,随后使用REST来指导Web架构的设计和改进工作。 1 Web的需求 在本系列博客的第一篇博客[解读REST] 1.REST的起源中,Web之父Berners-Lee在世界上第一个网站写下的第
blackheart
2018/01/19
8010
[解读REST] 5.Web的需求 & 推导REST
如何使用RESTler对云服务中的REST API进行模糊测试
RESTler是目前第一款有状态的针对REST API的模糊测试工具,该工具可以通过云服务的REST API来对目标云服务进行自动化模糊测试,并查找目标服务中可能存在的安全漏洞以及其他威胁攻击面。如果目标云服务带有OpenAPI/Swagger规范,那么RESTler则会分析整个服务规范,然后通过其REST API来生成并执行完整的服务测试。
FB客服
2021/03/09
5.1K0
如何使用RESTler对云服务中的REST API进行模糊测试
如何理解一个高度抽象化的架构风格本质
REST本身是一个高度抽象化的架构风格,因而总是很难对它有一个比较深入且印象深刻的理解。写这篇文章的目的,是自己对学习REST的一个总结,也希望可以通过这篇文章,能够让读者真正的理解REST。
竹清
2018/08/31
8820
testng对失败时截图处理
 3.也就是说我们只需要在onTestFailure方法里面调用ScreenShot类里面的takeScreenshot方法即可,但是我们注意到ScreenShot类里需要传一个driver进去。
流柯
2018/08/30
6520
使用ASP.NET Core 3.x 构建 RESTful API - 2. 什么是RESTful API
1. 使用ASP.NET Core 3.x 构建 RESTful API - 1.准备工作
solenovex
2019/11/12
6580
使用ASP.NET Core 3.x 构建 RESTful API - 2. 什么是RESTful API
We Do Sleep At Night, We Do REST Right
前言 笔者在上一篇文章中提过,任何一种非“强制性”约束同时也没有“标杆”工具支持的开发风格或协议,最后都会在不同的程序员手中得到不同的诠释,微服务是如此,DDD 是如此,笔者把它称为技术思想上的“康威定律”。不出意外的,REST 同样难逃此劫。光是在学习和收集资料的过程中,笔者就已经见过不下十多篇此类理解,甚至于在 url 中使用短划线或下划线连接单词也是众口难调。 尽管这只是小事。 微软也发布过关于如何设计 REST API 的开发指南,但是不幸的是,REST 的创始人 Roy Fielding 认为微
潘成涛
2018/07/09
9500
如何更新 Linux 的符号链接 | Linux 中国
UNIX 和 Linux 用户发现链接有很多用途,特别是符号链接。我喜欢使用符号链接的一种方式是管理各种 IT 设备的配置备份。
用户1880875
2021/11/15
2.7K0
使用 Spring HATEOAS 开发 REST 服务
原文地址:http://www.ibm.com/developerworks/cn/java/j-lo-SpringHATEOAS/
Gaussic
2018/08/17
1.3K0
点击加载更多

相似问题

REST超媒体/集合链接

24

用于创建和更新资源的超媒体友好的REST模式

24

使用WCF实现REST超媒体

10

REST:表单、链接和超媒体格式

11

REST:什么是好的超媒体和资源缓存策略?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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