rest端点_REST:使用Controller端点?

rest端点

在一般的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

rest端点

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

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

相关文章

Java 字符串与整数之间的互相转换

1、如何将字符串String转化为整数int int i Integer.parseInt(str); int i Integer.valueOf(my_str).intValue(); 注: 字串转成Double, Float, Long的方法大同小异。 2、如何将字符串String转化为Integer Integer integerInteger.valueOf(i)3、如何将整数 int 转换成字串 Str…

hello world_建立无服务器的“ Hello World”功能

hello world无服务器 ,功能即服务(FaaS)或仅具有云功能,就可以编写将在云中运行的代码。 您可以使用多种不同的语言(例如JavaScript(Node.js),Swift,Python,J…

xshell调出oracle安装界面,XShell+Xmanager实现在XShell中显示远程服务器的图形界面

你可以使用Xmanager软件,远程安装Oracle软件,Linux操作系统使用字符安装并不影响这种方式的使用。这个方案也可以大大优化你的Linux系统的性能,进而提高你的数据库性能。启动你的的Xmanager,我现在使用的是3.0版本,接收…

Oracle 数据库错误信息:动态执行表不可访问,本会话的自动统计被禁止

使用 PL/SQL 时, 每次第一次打开表的时候会提示以下信息: 动态执行表不可访问,本会话的自动统计被禁止,原因:V$SESSION,V$SESSTAT,V$STATNAME 没有被授权,没有权限访问这几张表,所以没有本法进行统计!那就…

jdk类加载器执行步骤_[JDK 11] jcmd中的类加载器层次结构详细信息

jdk类加载器执行步骤自从在JavaOne 2012上听说 jcmd以来,我就一直是命令行诊断工具jcmd的 粉丝 。 从那时起,我已经广泛使用了此工具,并多次在此博客中发布过此工具: jcmd:一个可以全部统治的JDK命令行工具 确定活动…

7445 oracle,Oracle 10g impdp 报 ORA-7445 [_INTEL_FAST_MEMCPY.A] 解决方法

在Oracle 10.2.0.4 以后的平台,我们在使用数据泵导入物化视图时,可能会遇到如下错误:...ksedmp: internal or fatal errorORA-7445: exception encountered: core dump [_intel_fast_memcpy.A()10][SIGSEGV] [Address not mapped to object] …

如何通过 PL/SQL Developer 将 Excel 数据导入 Oracle 对应的表中

首先将 Excel 文件另存为文本文件,然后在点击 PL/SQL Developer 菜单栏的【工具】-【文本导入器】,打开后如图所示: 上述步骤操作完之后,点击【到oracle的数据】:

kafka grpc_模型服务:流处理与使用Java,gRPC,Apache Kafka,TensorFlow的RPC / REST

kafka grpc机器学习/深度学习模型可以通过不同的方式进行预测。 我的首选方法是将分析模型直接部署到流处理应用程序(如Kafka Streams或KSQL )中。 您可以例如使用TensorFlow for Java API 。 这样可以实现最佳延迟和外部服务的独立性。 在我的Github项目…

Linux命令gitview,使用linux的gitview命令查看文件内容

使用linux的gitview命令查看文件内容发布时间:2020-07-22 10:23:42来源:亿速云阅读:99作者:清晨栏目:服务器这篇文章将为大家详细讲解有关使用linux的gitview命令查看文件内容,小编觉得挺实用的&#xff0c…

通过 PL/SQL Developer 建表

点击菜单栏的【文件】-【新建】-【表】,如下图所示:

nutshell_Nutshell中的Java 8语言功能-第2部分

nutshell编者注:您也可以在此处检查Part-1。 嗨,朋友,这是简明系列的Java 8语言功能的第2部分。 在这里,我们将讨论Java 8的以下功能: 接口中的静态方法 流 1.接口中的静态方法 什么是静态方法? 静态方…

Windows 7 下安装 Oracle 数据库和 PL/SQL Developer

win7下无论是32bits还是64bits,建议只安装oracle 11g 32bits,然后直接安装pl/sql developer,不需要额外的配置,就可以通过pl/sql developer来访问数据库了,如果真要配置,就是配置下pl/sql developer的连接&…

linux临时文件创建失败,-bash: 无法为立即文档创建临时文件: 设备上没有空间

Linux在使用中,突然出现空间不足情况,解决步骤大致为先清除进程,再删除文件一、进程状况1、查看磁盘空间和使用情况(​“df -h”显示目前磁盘空间和使用情况。 “df -i” 以inode模式来显示磁盘使用情况。)# df -h2、查看清理进程/# lsof | g…

机器学习java_Java机器学习,第1部分

机器学习java您搜索了某种导出机器学习模型的方法,以便可以将它们用于评估数据,并且可以将它们导出为PMML格式。 您实际上是在Java生态系统中工作的,但没有动机为它编写PMML库或rest api。 然后,我将向您推荐LightningScorer &…

MySQL 如何实现 Oracle 的 row_number() over() 分组排序功能

文章目录Oracle 的分组排序MySQL 的分组排序分析需求创建模拟数据SQL 实现结果演示Oracle 的分组排序 Oracle 的分组排序函数的语法格式如下: ROW_NUMBER() OVER([PARTITION BY column_1, column_2,…][ORDER BY column_3,column_4,…] )说明:表示根据…

linux mac地址文件夹,android4.4.2系统的mac地址文件在哪个文件里面

android 是Linux内核,linux中mac地址是保存在/etc/init.d/networ 文件中的但是在android中mac地址是直接写在硬件中的,需要通过API 才能获取1、Android 获取本机Mac 地址方法:需要在AndroidManifest.xml文件中添加权限:public String getLocalMacAddress…

Windows 如何用命令终端(CMD)启动和停止 MySQL 数据库服务

当安装完 MySql 后,默认每次 Windows 启动的时候都会将 MySql 服务启动起来。那么如何通过命令方式来启动和停止 MySQL 服务呢? Windows XP 如果是 Windows XP 则不需要使用管理员权限既可以很简单的启动和停止 MySQL 数据库服务,具体在命令…

java与java ee_Java EE MVC:处理表单验证

java与java ee在本文中,我们将介绍Java EE MVC中的表单验证。 Java EE MVC与Java Bean验证API( JSR 303 )集成在一起,这使得添加验证约束变得非常容易。 使用JAX-RS方式进行验证 假设我们有一个小的html表单,可用于发…

linux-macbook内核,技术|用 Linux 让旧 MacBook 重获新生

花上一小时,用 Fedora 让一台过时的 Mac 重新有用。最近,我偶然找到了一台 2011 年底的老款 13 英寸 MacBook Pro,有 125GB SSD 和 8GB 内存。我曾带着这台机器去世界各地旅行,当年,我开了很多场会议、研讨会或演示&am…

Windows 如何在命令终端(CMD)使用命令来访问本地/远程的 Oracle 数据库呢?

打开命令窗口后直接输入 sqlplus sys/123orcl as sysdba其中 sys 是用户名,123 是密码,orcl 是数据库实例名,as sysdba 表示用户 sys 是数据库管理员。 没有指定数据库实例名,那么访问默认的数据库实例,如果用户 sys…