在纯粹的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"  }]}

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

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

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

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

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

写:创建,更新,删除

在产品/评论场景中,永远不会在产品外部或没有产品的情况下创建评论。 它实际上是添加到产品中的。 这可以视为对产品的部分更新。 但是,对现有注释的更新或删除也可以视为产品的部分更新。 这会导致如何使用产品的部分更新来区分创建/更新和删除注释之间的复杂性。 如果需要这样做,则为注释创建上下文地址(指示产品/注释的层次结构性质)然后允许客户端向其发送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资源何时应获得其自己的地址?相关推荐

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

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

  2. 常用资源环境生态地理空间数据开源下载地址整理

    上学时研究需要用到大量资源环境生态地理空间数据,曾经搜集了不少资料,但开源的数据鱼龙混杂,参差不齐,数据筛选.验证和使用花费了不少时间,着实需要整理一下,在此记录一下已经整理过的数据!有需要的朋友可以 ...

  3. (翻译)表单中应使用文本域输入地址的原因

      你是否曾经在填写表单时卡在地址字段?有研究发现,用户填写表单时,遇到"地址2"字段会不知所措,止步不前.   不仅如此,第二个字段会误导用户将地址拆分为两段填写,让用户感到困惑 ...

  4. 【科普+技术】Linux服务器被占用大量资源,用三大网站排查ip地址和初步处理挖矿病毒

    目录 一.前言 二.挖矿[科普篇] 2.1 什么是挖矿 2.2怎么挖矿 2.3挖矿设备 2.4个人对挖矿的看法 三.检查是否被入侵[技术篇] 3.1检查进程 3.2检查网络连接 3.3检查ip地址 3 ...

  5. 恰逢网络营销火爆之际网络营销外包应保持怎样的整合营销推广思路?

    众所周知,在网络营销外包公司中整合营销也是一种促进网络营销推广进一步展现在用户群体眼前的方式之一,面对这种更为轻松便捷.高营销效率的方式,如何有针对性的将其推广并应用在网络营销外包中才是专业网络营销外 ...

  6. Android之Providing Resources(提供资源)

    当你写程序的时候应该习惯于把一些程序需要用到的资源,例如图片和字符串,分开并独立地保存在你的程序代码之外,这样你就可以独立地维护这些资源文件.你还应该通过特殊的名字的文件路径,为特定的设备配置提供可替 ...

  7. ASP.NET 2.0 中的资源与本地化

    转自MSDN 下载本文的代码:BasicInstincts2006_08.exe (878KB) 本页内容 控制页面级别的区域性设置 使用配置文件跟踪语言首选项 ASP.NET 2.0 中的资源文件 ...

  8. c#自定义控件资源释放问题_定义资源

    c#自定义控件资源释放问题 在Fielding的论文中 ,资源描述为: "可以命名的任何信息"--"文档或图像,临时服务(例如,"洛杉矶今天的天气") ...

  9. java 根据类名示例化类_如何使用示例从Java中的类路径加载资源

    java 根据类名示例化类 Java中的类路径不仅用于加载.class文件,而且还可以用于加载资源,例如属性文件,图像,图标,缩略图或任何二进制内容. Java提供了API来将这些资源读取为Input ...

最新文章

  1. 没错,使用 Nacos 踩坑了
  2. 一款可以在BCH链上养大熊猫的游戏——CryptoPandas
  3. Redis的持久化机制-RDB方式和AOF方式
  4. oracle 12c chad,ORACLE 12.2RAC之问题 ora.chad OFFLINE
  5. 时代亿信 文件共享访问控制网关
  6. java空文本_输出到文本文件,控制台为空-Java
  7. 安卓9.0Sensor框架
  8. 移动web:转盘抽奖(幸运大转盘)
  9. IntelliJ IDEA2017创建web工程并实现远程部署tomcat
  10. Linux iptables防火墙详解(四)——配置实战
  11. PS实现照片水彩画效果
  12. 如今微信最严新规出台,微信域名防封刻不容缓
  13. 真·浅谈System.setOut()
  14. 交互式多模型算法IMM——机动目标跟踪中的应用
  15. 《富人的逻辑》书中的精髓:为什么暴富起来的人会在短期内失去财富,我们又该如何去创造财富和持续拥有财富。
  16. 7.1.5、Sqoop__sqoop常用命令参数,import,export,hive,数据库连接,hbase等
  17. 服务器系统重启和断电重启,服务器设置断电重启吗
  18. c语言换行编辑,C语言怎么换行
  19. 2021年安全生产模拟考试(建筑起重机司机-塔式起重机模拟考试题库)安考星
  20. MB525 系统软件说明

热门文章

  1. 作为一名Java程序员,你竟然不知道Instrumentation
  2. JavaScript学习总结(九)——Javascript面向(基于)对象编程
  3. 理解大型分布式网站你必须知道这些概念
  4. Java通过Class的对象来获取泛型的class示例
  5. Maven精选系列--私库搭建及使用
  6. JavaFX之TableView的MenuButton
  7. sh(Spring+Spring mvc+hibernate)——IEmpDao.java
  8. c语言程序设计实践教程张卫国,C语言程序设计实践教程
  9. python模板模式_python-模板方法模式
  10. ffmpeg中文开发手册_快速调用复杂命令,支持中文注释,命令行备忘工具navi两天就火了...