REST:使用Controller端点?

在一般的REST架构中,基本概念是资源。 在资源之后,下一步是为这些资源开发一个统一接口,这在HTTP领域通常意味着:

  • 创建为POST
  • 阅读就是GET
  • 更新为PUT(或部分更新为PATCH)
  • 删除已删除

在现实世界中,不可避免地某些操作不会很好地映射到资源。 通常这是少数操作,例如重置密码。 可以将它们建模为

  • / password /上的PUT

或作为

  • 控制器端点和到/ resetpassword的POST

后者可能被认为比纯REST更接近于程序化REST,但是有时客户和客户希望您务实。 本文提供了有关何时考虑使用Controller选项的建议。

动作是否映射到CRUD?

现实应用程序中的几个动作无法很好地映射到CRUD。 例如,贝宝的取消计费协议API是:

POST /v1/payments/billing-agreements/agreement_id/cancel

取消动作很少能很好地映射到资源的CRUD。 它可以解释为:

  • 一些资源被创建(取消记录)
  • 一些资源被更新(某些状态列可能被设置为取消)
  • 或某些资源被删除(订单请求被删除)。

客户为什么要关心取消的处理方式? 难道它总是会改变吗? 在某些情况下,使用HTTP隧道的API不能很好地映射到CRUD问题。 在取消帐单协议中,这将是:

POST /v1/payments/billing-agreements/agreement_id

与身体:

{"operation":"cancel"
}

这被认为是反模式,决不能使用。 而是应使用控制器端点。

资源状态或工作流程?

在REST体系结构中,客户端或服务器之间的每个请求通常都会更改资源状态(写操作)或应用程序状态(查询或读操作)。 但是,在现实世界中,工作流是不可避免的。 例如,重置密码流程通常包括:

  • 向用户询问userId(通常是电子邮件)
  • 系统检查系统上是否存在电子邮件
  • 向用户发送包含重置密码链接的电子邮件
  • 确保用户只有一定时间才能单击链接
  • 当用户单击链接时,他们可能会被问到一系列问题
  • 他们将被要求重新输入新密码,以确保没有错字

当客户端操作是复杂工作流的一部分时,资源状态和应用程序状态更改可能不容易建模。 它们可能不会同步发生,并且可能会根据工作流的建模方式或工作流何时需要添加额外的步骤进行更改。 在这种情况下,请考虑使用控制器端点。

无需PUT的REST

在某些情况下,可以设置参数以避免使用PUT,而可以使用POST到另一个表示意图的端点。 例如,要更改地址而不是将PUT调用到/ address /,客户端将调用POST到/ changeaddress并完全避免使用PUT。 这里的想法是使命令/查询分离更严格。 有关更多信息,请参见https://www.thoughtworks.com/insights/blog/rest-api-design-resource-modeling。 通常,建议使用PUT / PATCH进行更新/部分更新,并且仅在前两个原因之一适用时才使用控制器端点。

那么,为什么何时使用控制器样式终结点可能涉及主观性。 以上至少可以帮助您做出决定。 请记住,在您考虑采用这种方法的情况下,它应该永远只是少数API。 您在常规的Uniform Interface之外,无法进行独特的样式操作,但是您仍然希望使它们对API的客户来说很直观。

翻译自: https://www.javacodegeeks.com/2018/05/rest-using-a-controller-endpoint.html

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

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

相关文章

【2021.02.09更新】数字信号处理公式推导

卷积 h(t)⊗x(t)∫−∞∞h(τ)x(t−τ)dτh(t) \otimes x(t) \int_{ - \infty }^{ \infty } {h(\tau )x(t - \tau )d\tau }h(t)⊗x(t)∫−∞∞​h(τ)x(t−τ)dτ 令τut2\tau u \frac{t}{2}τu2t​,则 h(t)⊗x(t)∫−∞∞h(ut2)x(−ut2)duh(t) \otimes x(t) …

旅游展示网站-前端网页设计技术完整精美源码HTML+CSS+JS

微信公众号:创享日记 发送:旅游网站 获取完整源码(打开即可用) 效果①首页主页 效果②关于我们页 效果③提供的服务页 效果④我们的能力页 /*页面重置*/ html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote…

【2021.01.01】人生中很重要的一个十年,差强人意

回顾整个2020年,是疯狂的一年,也是令人难忘的一年,对于我也是比较励志的一年,绝对是自己人生中的一个里程碑。完成了人生中最重要的一件大事,感谢有你一直陪着我,愿天下有情人终成眷属,最终走到…

数字信号处理实验一 系统响应及系统稳定性

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记 发送:响应及稳定…

BPSK调制下(2,1,3)、(2,1,6)卷积码与QC-LDPC码译码性能和抑制突发噪声性能对比(MATLAB实现)

欢迎同步关注公众号【逆向通信猿】 QC-LDPC码的原理及构造 通过准循环码方式构造低密度校验矩阵 H ⁡ \operatorname{H} H,基础校验矩阵采用 H b = [ 0 1

数字信号处理实验二 IIR数字滤波器设计及软件实现

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记 发送:iir滤波器 …

高级java开发_适用于高级Java开发人员的十大书籍

高级java开发Java是当今最流行的编程语言之一。 有很多适合初学者的书籍。 但是对于那些使用Java进行过一段时间编程的人来说,其中有些人看起来有些简单和多余。 初学者的书没有带来新鲜有趣的想法。 但是,高级Java书籍并不总是就在眼前,并非…

数字信号处理实验三 FIR数字滤波器设计与软件实现

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记 发送:fir滤波器 …

一种伪随机交织器的生成方法

欢迎同步关注公众号【逆向通信猿】 线性同余交织+m序列寄存器状态→伪随机交织 线性同余交织 A n + 1 ≡ a A n + c   m

[JDK 11] jcmd中的类加载器层次结构详细信息

自从在JavaOne 2012上听说 jcmd以来,我就一直是命令行诊断工具jcmd的 粉丝 。 从那时起,我已广泛使用此工具,并多次在此博客中发布过此工具: jcmd:一个可以全部统治的JDK命令行工具 确定活动的热点垃圾收集器 程序化…

无线定位技术实验一 TDOA-FDOA联合定位

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记 发送:联合定位 获…

QPSK信号调制之ASCII码

clear;close all;clc; sym_dec(32:126).; sym_bitde2bi(sym_dec,8,left-msb); sym_bitreshape(sym_bit.,1,[]); bits repmat(sym_bit,1,50).; % bit2 reshape(bits,2,[]).; Nlength(bits)/2;M4; pha_qpsk qammod(bits,M,InputType,bit,PlotConstellation,true); % 生成相位 …

无线定位技术实验二 TDOA最小二乘定位法

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记 发送:tdoa最小二…

高阶矩和高阶累积量的换算关系

累积量可以用矩表示为 c x ( I ) = ∑ ⋃ p = 1 q I p = I ( − 1 )

无线定位技术实验三 基于信号强度的位置指纹定位仿真

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记 发送:指纹定位 获…

远程声控系统(MATLAB代码见CSDN资源)

欢迎同步关注公众号【逆向通信猿】 远程声控系统技术报告 一、题目要求 实现一个远程声音控制系统。首先采集不同的语音指示信号,进行适当压缩;然后通过噪声信道实现远程传输,远端接收后再通过适当计算识别出是何指示,最后送入一个处于未知状态、但能控/能观的控制系统,…

信号处理系统综合设计-最小阶数的IIR数字高通滤波器

微信公众号:创享日记 发送:最小阶 获取完整报告(含源代码程序结果分析) 设计一个最小阶数的IIR数字高通滤波器,指标要求如下: 以小于1dB的衰减通过150Hz的分量;以至少40dB抑制100Hz的分量&…

java 设计模式 示例_Java中的策略设计模式-示例教程

java 设计模式 示例策略模式是行为设计模式之一 。 当我们对一个特定的任务有多种算法并且客户决定在运行时使用的实际实现时,将使用策略模式。 策略模式也称为策略模式 。 我们定义了多种算法,并让客户端应用程序将算法用作参数。 此模式的最佳示例之一…

【工具篇】信号与系统公式总结梳理

一、 e j ω 0 n {e^{j{\omega _0}n}} ej

电磁场与电磁波实验二 熟悉Matlab PDEtool在二维电磁问题的应用

微信公众号:创享日记 发送:二维电磁 获取完整报告(含源程序代码结果分析) 一、实验过程 1.命令行输入pdetool打开工具箱 2.使用矩形工具拖动绘制矩形。 3.点击 4.双击矩形框上边,设置参数如下: 二、实验…