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,一经查实,立即删除!

相关文章

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仅作学术交流,如有侵权,请联系删文本篇文章讲解了计算…

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 …

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…

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

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

Spring Boot和Apache Camel

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

苹果android投屏,iphone怎么投屏到mac?苹果手机投屏到苹果电脑方法

iphone和mac的使用人群越来越多,其中投屏功能却难倒了大部分新手用户,许多使用iPhone以及Mac的用户朋友都还不知道iPhone怎么投屏到mac,好奇的用户朋友马上点击查看iphone投屏到mac教程来实现这个具有科技革新感的功能吧。官方推荐方法1:用数据线- 1.使用lightning线…

微服务java模块内存管理_Java 9模块服务

微服务java模块内存管理接线与查找 Java长期以来都有一个ServiceLoader类。 它是在1.6中引入的,但是自Java 1.2以来就使用了类似的技术。 一些软件组件使用了它,但是使用并不广泛。 它可以用于模块化应用程序(甚至更多)&#xff0…

使用实例工厂方法实例化_一些工厂实例

使用实例工厂方法实例化我时不时地发现自己摸索了一些旧代码,找到了“我在哪里做过类似工厂的事情”的示例。 上周再次发生这种情况时,我决定只查找所有示例,并创建一个示例项目和有关该示例的博客文章。 所以在这篇文章中,我&a…

linux内核设计与实现 epub_Epoll学习服务器的简单实现-Linux内核Epoll结构

1.Begins~有的人学习linux编程很久,只知道网络编程是socket,bind, listen。。。,然而这些都是网络通信软件最基本的接口。在某网络公司待了y,也了解到公司的基础就是网络转发 ,然而网络转发实现并非我们平时…

鸿蒙有安卓内核吗,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪

在华为开发者大会上,华为消费业务CEO 余承东,正式发布鸿蒙OS2.0,并宣布华为鸿蒙OS将全面启用全场景生态,并将于2020年12月发布手机版。余承东还表示,明年,华为的智能手机将全面升级,以支持鸿蒙操…

命名对象实体对象_我的对象命名

命名对象实体对象这是最常见的辩论之一。 大多数人对此主题有自己的见解,却没人能真正说出哪个是正确的。 我当然不能,但是尽管如此,我还是决定与大家分享我的想法,投入两美分,也许对某人会有帮助。 当我创建一个新类…

微信html人脸识别接口,微信人脸识别可视化的实现:

实现方式主要通过以下模块实现:DateFromWebChat (从网页版微信窗口下载好友头像)AI (识别模块,主要用于识别好友头像是否为人脸,并且计算人脸的数量与头像的总数且return)DateVisul (数据可视化模块,用与AI模块返回参数的可视化)u…

安卓手机端运行的adb工具_MQTT通信手机端接收生产车间设备运行信息3

应用场景:对车间重点设备的运行参数进行实时跟踪。比如烘干炉的烟囱温度、TNV的出口温度、喷漆室的温湿度、小时产量等等信息。以前这些信息的获取都需要在电脑端获取、相对比较繁琐。这里我们选择在手机端实现获取这些信息。尤其是对于作者这样的设备负责人而言&am…

jsf 项目_您将在下一个项目中使用JSF吗?

jsf 项目上周有一篇很棒的stackoverflow博客文章,主题是“ Javascript框架的残酷生命周期” 。 这篇文章是关于Javascript UI框架(angularjs,angular,jquery和react)的流行和流行的速度。 这篇文章的关键指标是每月关于…

查询varchar实际大小_微服务和VUE(11): mybatis 动态查询

1. 新建class表和student表:CREATE TABLE class ( class_id varchar(20) NOT NULL, class_name varchar(50) DEFAULT NULL, headmaster_name varchar(20) DEFAULT NULL, headmaster_tel varchar(20) DEFAULT NULL, PRIMARY KEY (class_id)) ENGINEInnoDB …

Linux 如何安装程序的源代码软件包/源码程序包/源码包?

文章目录一、安装源码包的三个步骤(一)执行命令 configure,进行配置/检测(二)执行命令 make,编译源码(三)执行命令 make install,安装软件二、源码包安装示例&#xff08…