rest资源设计_REST资源何时应获得其自己的地址?

rest资源设计

在纯粹的REST方法中,所有端点(起始端点除外)都是不透明的,因此不需要发布其各种详细信息。 即使使用这种方法,本文中的要点也很重要,因为服务器逻辑将必须确定何时需要结束点。

介绍

在REST体系结构中,实体或资源( 对于本文的其余部分将使用术语“实体”)可能具有也可能没有其自己的地址。 例如,假设我们有一个库存应用程序,供商人用来销售其产品。 立即可以看到一个产品实体。 它的URL类似于:/ product / {id}

现在,销售产品的商人可以将自己的评论添加到产品中。 例如, ”
星期五 卖得 很好 ”或“ 如果产品没有开始销售,请考虑更改价格 ”。 一个产品可以有0 .. *注释。 如前所述,产品具有自己的地址:/ product / {id},例如/ product / 1231233

和这样的响应负载

{"id":"1231233","type":"Beer","comments": [{"id":"1","comment":"Sells very well on Fridays"                 }, {"id":"2","comment":"Consider changing price if product doesn't start selling"  }]}

可以看出,有效负载返回Comment对象的集合。 每个评论都应该有自己的地址,还是可以将它们嵌入产品响应中? 为了帮助回答这个问题,应考虑以下内容。

实体在包含实体上下文之外是否有任何意义?

如果实体(例如注释)在其包含的实体(例如产品)之外具有含义,则它们应具有自己的地址。 例如,假设实体是学生,并且学生返回了他/她所学习的大学列表。 这些大学在学生之外具有自己的含义。 因此,显然大学应该有自己的地址。 在“活动/注释”业务情景中,“注释”仅针对活动存在。 没有其他实体会引用它们或需要引用它们。 因此,需要考虑其他方面。

是否需要对单个实体执行操作?

是否应该允许客户端创建,读取,更新或删除单个实体? 这些必须分开考虑。

写:创建,更新,删除

在产品/评论场景中,永远不会在产品外部或没有产品的情况下创建评论。 它实际上是添加到产品中的。 这可以视为对产品的部分更新。 但是,对现有注释的更新或删除也可以视为产品的部分更新。 这会造成如何使用产品的部分更新来区分创建/更新和删除注释的复杂性。 如果需要这样做,则为注释创建上下文地址(指示产品/注释的层次结构性质)然后允许客户向其发送POST,PUT,PATCH,DELETES会更简单。

范例网址:/ product / 1231233 / comment / 1

在某些情况下,包含父实体的实体可能不会返回有关子实体的所有信息。 例如,再次考虑产品–>评论场景。 假设评论很大。 这意味着产品的有效载荷也非常大。 在这种情况下,对于产品而言,仅返回评论摘要,如果客户希望完整的实体提出单个请求,则可能更为谨慎。 同样,如果要获得一个单独的实体会付出巨大的性能成本(例如,必须调用第三方API来获取有关注释的所有信息),那么将URL链接发送给实体(而不是而不是实际实体的内容。

N + 1问题

如果需要单独读取,请注意不要引入N + 1问题。 例如,假设一个产品可能有100条注释。 如果客户需要所有信息,Product API将仅返回Comment的摘要以及指向每个评论的链接。 但是,如果客户端希望每一个注释,则意味着现在将有100个HTTP请求。 如果这是一种潜在的情况,则应考虑将所有评论汇总到产品中的辅助端点。 这类似于API网关模式。

端点表面积

在任何发布合同的体系结构中,如果合同太多,开发人员就很难理解。 大多数知名的API(例如PayPal,Amazon,Twitter,Google)通常只有大约20至30个地址。 这是一个好目标。 如果有5,000个不同的地址,它可能会变得太大而难以控制等。

总之,决策图提供了有关您应该做什么的指南。

翻译自: https://www.javacodegeeks.com/2018/01/rest-resource-get-address.html

rest资源设计

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334212.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百度地图android绘图类,Class:android总类/android离线地图类

出自百度地图API跳转到:导航,搜索com.baidu.mapapi类 MKOfflineMapjava.lang.Object∟ com.baidu.mapapi.MKOfflineMappublic class MKOfflineMapextends java.lang.Object离线地图类(只支持老版离线地图)。字段摘要方法摘要返回类型方法booleanstart(int cityID)启…

android webviwe 头布局,Android布局问题,带有WebView下方的按钮

您需要使用android:layout_above“id/btnok”作为您的webview,并填写_parent作为webview的宽度和高度。但是,需要注意的是,在1.5及以下版本中,为了正确识别XML,需要指定相对布局视图。换句话说,您必须先使用按钮,然后使用WebView,因为WebView将引用该按钮。我认为这在1.6或2.0中…

简述python的编程规范_python编程规范

一 代码风格:(0)参考google代码规范:*链接:http://zh-google-styleguide.readthedocs.org/en/latest/google-python-styleguide/(1)缩进:*python通过缩进对齐来表达代码逻辑:同一层次的语句必须有相同的缩进&#xff0…

ckeditor回显带标签_Spring Boot中带有CKEditor的AJAX

ckeditor回显带标签1.概述 在本文中,我们将介绍如何在Spring Boot中使用CKEditor 。 在本教程中,我们将导入一个包含大量数据的XML文档,对使用GET请求将一组数据加载到CKEditor实例的能力进行编程,并执行POST请求以保存CKEditor的…

android 可行性分析,可行性研究项目分析程序与步骤

项目分析程序项目分析分析工作步骤分析程序框架分段实施方法第一阶段初期工作1、收集资料。包括业主的要求,业主已经完成的研究成果,市场、厂址、原料、能源、运输、维修、共用设施、环境、劳动力来源、资金来源、税务、设备材料价格、物价上涨率等有关资…

原码一位乘法器设计_十分钟带你彻底搞懂原码、反码、补码

点击上方“程序员大白”,选择“星标”公众号重磅干货,第一时间送达编辑 | 程序员大白公众号来源丨https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html仅作学术交流,如有侵权,请联系删文本篇文章讲解了计算…

enumset_枚举集合的EnumSet

enumset在上一篇博客文章中,我们发现了EnumMap用于带有枚举键的映射。 您可能已经观察到,还有一个专门针对枚举优化的Set : EnumSet 。 我们再次定义一个CoffeeType枚举: public enum CoffeeType {ESPRESSO, POUR_OVER, FRENCH_…

Linux 目录之 /etc/init.d/ 介绍

文章目录一、关于目录 /etc/init.d/二、关于目录 /etc/rc.d/init.d/三、关于文件 /etc/rc.local四、/etc/init.d/ 和 service 文件五、关于命令 service六、关于文件 /etc/inittab七、关于目录 /etc/init/注意:以 System V init 或者 Upstart 为初始化系统的 Linux …

c语言行列式源代码,新手作品:行列式计算C语言版

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼对话 ControlHeightDecrease ShiftUp Arrow 向上调整选定的控件或对话一个对话单位对话 ControlHeightIncrease ShiftDown Arrow 向下调整选定的控件或对话一个对话单位对话 ControlMoveDown Dow…

RPM 软件包名中的 el5、el6、el7 是什么?

EL 是 Red Hat Enterprise Linux 的简写。 EL6 表示软件包可以在 Red Hat 6.x,CentOS 6.x,CloudLinux 6.x 进行安装EL5 表示软件包可以在 Red Hat 5.x,CentOS 5.x,CloudLinux 5.x 进行安装EL7 表示软件包可以在 Red Hat 7.x&…

pbc是什么材料_职道漫谈 | 华为的绩效跟你们公司的绩效,有什么区别?

文 | 沈齐雨作者赐稿授权发布,供朋友圈转发分享!欢迎投稿:3069462510qq.com相信现在随便问几个公司员工:你们公司的绩效运行的怎么样?得到的答案大多会是:“完全就是摆设。”“没用不说,还特别浪…

java 异常处理发生异常_处理Java中的异常

java 异常处理发生异常每个程序员都希望编写一个完美的程序。 也就是说,程序运行时没有任何障碍。 好吧,如果希望是马,乞g就会骑。 除了程序员的所有愿望之外,有时还会发生无法预料的情况。 在Java中,这些无法预料的…

android提交项目到svn,Android Studio 配置SVN,通过Share project提交项目和实现忽略文件...

1:首先电脑本身装的SVN必须在bin目录下包含svn.exe文件,如下图。这个文件是在安装SVN时选择安装command line client tools才会出现。如果没有,需要重新安装SVN。2:将SVN关联到Android Studio中声明:在这里我使用的And…

数据库 MySQL 如何设置表的主键自增起始值

文章目录表已有数据,truncate 之后再设置 auto_increment,可行表已有数据,delete from 之后再设置 auto_increment,可行主键自增起始值重置查询表名为 tf_user 的 auto_increment 值创建表时设置 AUTO_INCREMENT 参数表已有数据&a…

数独游戏技巧从入门到精通_如何引导孩子入门九宫格数独?掌握4个技巧口诀,孩子思维提升快...

九宫格数独对孩子的思维训练有着非常不错的效果,我们完全可以用其培养孩子对数字的兴趣,并培养孩子严谨的逻辑推理态度。那九宫格数独有没有技巧口诀呢?对于孩子来说,过于复杂的技巧他们也掌握不了。所以,我们培养孩子…

Spring Boot和Apache Camel

随着软件世界的发展,正在开发更加复杂的系统,这些系统必须相互集成。 它从SOA开始,然后一直到微服务。 骆驼是我想到的第一大集成工具,因为如今的骆驼springboot是一个非常强大的组合。 第一步是将骆驼依赖项包含到我们的sprin…

MySQL 如何复制表

文章目录一、复制表结构及数据到新表二、只复制表结构到新表(一)使用关键字 like(二)使用 select 语句三、真正完整复制表四、复制表,同时重新定义字段名(拷贝旧表中部分的字段)五、复制表&…

android获取应用安装通知消息,如何在Android 11 上获取已安装应用列表

在Android 11上,我们可以看到很多的更新都是用来保护隐私的,如果你的app 在使用PackageManger的方法来获取安装的应用列表,那么在Android11上,就需要做一点改变了。我们来看看一下获取应用列表的代码,会不会和你的很相…

python特征选择pso_粒子群优化算法(PSO)之基于离散化的特征选择(FS)(三)

作者:Geppetto前面我们介绍了特征选择(Feature Selection,FS)与离散化数据的重要性,总览的介绍了PSO在FS中的重要性和一些常用的方法,介绍了FS与离散化的背景,介绍本文所采用的基于熵的切割点和最小描述长度原则(MDLP)…