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资源设计

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

  1. 计算机技术应用读书心得,《多媒体环境下的教学设计和资源的应用》读书心得体会...

    <多媒体环境下的教学设计和资源的应用>读书心得体会 五天的培训很快就结束了.在五天的培训中,我们认识了信息学校的老师们,为他们认真的工作态度.高涨的工作热情所打动,最关键的是我们从中学到了 ...

  2. 团队协作新趋势:语雀——助力更多:个人、企业、博客、协作、托管、画布设计、资源托管(立体化趋势)

    团队协作 · 业务模式 · 新趋势: 语雀:个人.企业.博客.协作.托管.画布设计.资源托管(立体化趋势) 博主自留地,请勿瞎踩 官方文档: 语雀官方入口:https://www.yuque.com/ ...

  3. 50个精美的 PSD 用户界面素材和设计模板资源

    对于每一个网页设计师来说,有预先设计好的和可编辑的UI元素是组织和优化工作流程的关键.这些元素可以让你快速制作出风格统一的网页原型.今天,本文与大家分享50个精美的PSD资源,包含UI元素模板.表单. ...

  4. 权限设计(资源权限和数据权限)

    2019独角兽企业重金招聘Python工程师标准>>> 权限设计(资源权限和数据权限) 贴下自己的码云地址 https://gitee.com/imbobo_bo/angel-bo ...

  5. 简谈FPGA设计中不同设计方法资源消耗对比

    简谈FPGA设计中不同设计方法资源消耗对比 今天和大侠简单聊一聊FPGA设计中不同设计方法硬件资源消耗对比,话不多说,上货. 在这里,我们使用Verilog HDL 设计计数器,通过两种不同的写法,对 ...

  6. 移动APP设计国外资源总汇

    目前,对于刚入行移动APP视觉或者交互设计的学习的你来说,一些好的设计辅助工具,一些素材下载,优秀网站设计网站,数据抓取和分析的小助手都是必不可少的.今天主要介绍的都是国外上的一些设计工具的下载,素材 ...

  7. HTML数字化教学资源平台,网页设计与制作教学课件作者HTML+CSS+JavaScript张洪斌教学资源数字化教学资源平台网站布局课件.doc...

    网页设计与制作教学课件作者HTML+CSS+JavaScript张洪斌教学资源数字化教学资源平台网站布局课件.doc 11.3 实例1:数字化教学资源平台网站布局 11.3.1效果图的分析与切片 本实 ...

  8. java毕业生设计学习资源下载管理计算机源码+系统+mysql+调试部署+lw

    java毕业生设计学习资源下载管理计算机源码+系统+mysql+调试部署+lw java毕业生设计学习资源下载管理计算机源码+系统+mysql+调试部署+lw 本源码技术栈: 项目架构:B/S架构 开 ...

  9. UI设计素材资源网站推荐

    和大家分享一些优秀的UI设计.素材网站,互联网/移动互联网工作者必备资源! 网页UI设计PSD资源站大集合 ikeepu.com/list/61360 国内外200+设计类网站大搜罗- ikeepu. ...

最新文章

  1. IDC机房运行安全评测怎么做,自建IDC机房评测材料准备要点
  2. 港科大陈凯、杨强教授新书重磅发布,系统揭秘隐私计算 | 文末送书
  3. centos 单用户登陆模式操作
  4. php如何防止重复提交表单,如何防止php重复提交表单方法
  5. 刘德华2007新歌《一》歌词及在线试听地址
  6. windows10(专业版和家庭版)---禁止自动更新系统
  7. 计算机恶搞bat代码,电脑重启bat代码怎么设置 电脑整人bat代码大全
  8. Aop切面自定义注解的使用
  9. SYN重要知识点总结
  10. CSS实现图片层闪光效果
  11. vue 获取当前本机ip_vue中获取本地ip
  12. QT 获取键盘组合键
  13. caffe学习之conver_imageset.bin的使用方法,caffe下图片转lmdb格式类型数据总结
  14. 敏捷项目如何保证测试质量
  15. 一个安全的邮件习惯如何练成的
  16. Vue3+Vite+TypeScript项目开发
  17. 苹果电池显示维修_苹果新款 iPhone SE 屏幕维修、电池更换多少钱?
  18. zcmu-5066: 黑暗长廊
  19. 小红书运营模式是怎样的?弄清楚小红书底层逻辑
  20. 如何在线压缩图片大小?图片上传太大怎么缩小?

热门文章

  1. 洛谷P1173:[NOI2016] 网格(tarjan、离散化)
  2. P5304-[GXOI/GZOI2019]旅行者【最短路】
  3. POJ3678-Katu Puzzle【2-SAT】
  4. P1941-飞扬的小鸟【dp】
  5. nssl1318-地铁重组【dp】
  6. 【DP】【树状数组】方伯伯的玉米田/优美玉米(luogu 3287/金牌导航 数据结构优化DP-5)
  7. 【贪心】畜栏预定(ybtoj 贪心-1-3)
  8. 双向广搜 8数码问题
  9. Sentinel(三)之如何使用
  10. Druid SQL查询数据timeStamp时区问题