热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在RESTfulURL中使用动词和形容词的替代方法

如何解决《在RESTfulURL中使用动词和形容词的替代方法》经验,为你挑选了1个好方法。

我想在我的REST API中添加操作,以便在不同的"商店"之间移动"资源".

例如,假设我的资源通常由以下URL访问:

/resources
/resources/{resourceId}

现在假设我想'停用'某些资源,即从概念上将其移动到另一个子文件夹.允许这种情况的最直接的方法如下.

    '停用'资源,即使其在/ resources下不可用.从概念上讲,它将对象'移动'到' / resources/deactivated / '子文件夹:

    POST /resources/{resourceId}/deactivate   
    

    或者:

    POST /resources/deactivated/{resourceId}
    

    获取所有已停用的对象:

    GET /resources/deactivated      
    

    反转'deactivate'动作,即概念上将对象从' / resources/deactivated / '子文件夹移回主要文件夹(' / resources ').

    POST /resources/{resourceId}/reactivate    
    

    要么

    POST /resources/deactivated/{resourceId}/restore     
    

    这个API对我来说似乎很直观.但它似乎违反了我在许多最佳实践中看到的"首选名词"规则 - 关于REST API的文章:我使用动词和形容词而不是名词!

请注意,我可能有所有端点的参数,例如GET/resources/deactivated?createdBefore = 01022017

我的REST API有更好的替代方案吗?即更多RESTful,但不是更直观的?

我能找到关于这个主题的好资源:

休息URL中名词与动词之间的混淆

GitHub对动词的使用(POST/gists /:id/star,DELETE/gists /:id/star):https://stackoverflow.com/a/19648997/1847482

需要寻找'另一种对象类型'的好点:https://stackoverflow.com/a/2022938/1847482

cassiomolin.. 6

首先,请记住REST代表Re presentational S tate T ransfer.

这完全取决于资源及其状态.操作如激活,关闭搬迁都是关于用新的显示置换资源的当前状态,你不需要在URL中的动词来表示这样的操作.


例如,要替换资源的状态,您可以在PUT请求的有效负载中发送资源的新表示:

PUT /api/resources/[id]/status HTTP/1.1
Host: example.org
Content-Type: application/json

{ "status" : "active" }

可以理解为将由所标识的资源的状态替换为[id]在请求有效载荷中发送的资源的状态.


然后,您可以使用以下内容来获取具有特定状态的资源:

GET /api/resources?status=active HTTP/1.1
Host: example.org
Accept: application/json

可以理解为给我一个具有状态的所有资源的表示active.


例如,要将资源移动到另一个文件夹,您可以:

PUT /api/resources/[id]/folder HTTP/1.1
Host: example.org
Content-Type: application/json

{ "target" : "draft" }

可以理解为将所标识的资源的文件夹替换[id]为请求有效载荷中发送的资源的文件夹.



1> cassiomolin..:

首先,请记住REST代表Re presentational S tate T ransfer.

这完全取决于资源及其状态.操作如激活,关闭搬迁都是关于用新的显示置换资源的当前状态,你不需要在URL中的动词来表示这样的操作.


例如,要替换资源的状态,您可以在PUT请求的有效负载中发送资源的新表示:

PUT /api/resources/[id]/status HTTP/1.1
Host: example.org
Content-Type: application/json

{ "status" : "active" }

可以理解为将由所标识的资源的状态替换为[id]在请求有效载荷中发送的资源的状态.


然后,您可以使用以下内容来获取具有特定状态的资源:

GET /api/resources?status=active HTTP/1.1
Host: example.org
Accept: application/json

可以理解为给我一个具有状态的所有资源的表示active.


例如,要将资源移动到另一个文件夹,您可以:

PUT /api/resources/[id]/folder HTTP/1.1
Host: example.org
Content-Type: application/json

{ "target" : "draft" }

可以理解为将所标识的资源的文件夹替换[id]为请求有效载荷中发送的资源的文件夹.


推荐阅读
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 本文探讨了如何利用 jQuery 的 JSONP 技术实现跨域调用外部 Web 服务。通过详细解析 JSONP 的工作原理及其在 jQuery 中的应用,本文提供了实用的代码示例和最佳实践,帮助开发者解决跨域请求中的常见问题。 ... [详细]
  • 本文详细解析了微信服务端示例类的功能与应用。其中,`ClientResponseHandler` 类主要用于处理微信支付所需的响应数据,而 `TenpayHttpClient` 则是对 HTTP 请求(包括 GET 和 POST 方法)进行了封装,以便在内部调用时更加便捷和高效。这些工具类在实际开发中起到了关键作用,开发者无需深入了解其底层实现细节,即可轻松集成微信支付功能。 ... [详细]
  • 在Django中提交表单时遇到值错误问题如何解决?
    在Django项目中,当用户提交包含多个选择目标的表单时,可能会遇到值错误问题。本文将探讨如何通过优化表单处理逻辑和验证机制来有效解决这一问题,确保表单数据的准确性和完整性。 ... [详细]
  • Java能否直接通过HTTP将字节流绕过HEAP写入SD卡? ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
  • 本文详细探讨了 jQuery 中 `ajaxSubmit` 方法的使用技巧及其应用场景。首先,介绍了如何正确引入必要的脚本文件,如 `jquery.form.js` 和 `jquery-1.8.0.min.js`。接着,通过具体示例展示了如何利用 `ajaxSubmit` 方法实现表单的异步提交,包括数据的发送、接收和处理。此外,还讨论了该方法在不同场景下的应用,如文件上传、表单验证和动态更新页面内容等,提供了丰富的代码示例和最佳实践建议。 ... [详细]
  • 本文全面解析了JavaScript中的DOM操作,并提供了详细的实践指南。DOM节点(Node)通常代表一个标签、文本或HTML属性,每个节点都具有一个nodeType属性,用于标识其类型。文章深入探讨了DOM节点的创建、查询、修改和删除等操作,结合实际案例,帮助读者更好地理解和掌握DOM编程技术。 ... [详细]
  • 基于Dubbo与Zipkin的微服务调用链路监控解决方案
    本文提出了一种基于Dubbo与Zipkin的微服务调用链路监控解决方案。通过抽象配置层,支持HTTP和Kafka两种数据上报方式,实现了灵活且高效的调用链路追踪。该方案不仅提升了系统的可维护性和扩展性,还为故障排查提供了强大的支持。 ... [详细]
  • 本文深入解析了Java 8并发编程中的`AtomicInteger`类,详细探讨了其源码实现和应用场景。`AtomicInteger`通过硬件级别的原子操作,确保了整型变量在多线程环境下的安全性和高效性,避免了传统加锁方式带来的性能开销。文章不仅剖析了`AtomicInteger`的内部机制,还结合实际案例展示了其在并发编程中的优势和使用技巧。 ... [详细]
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
  • 设计实战 | 10个Kotlin项目深度解析:首页模块开发详解
    设计实战 | 10个Kotlin项目深度解析:首页模块开发详解 ... [详细]
  • 本章节在上一章的基础上,深入探讨了如何通过引入机器人实现自动聊天、表情包回应以及Adidas官方账号的自动抽签功能。具体介绍了使用wxpy库进行微信机器人的开发,优化了智能回复系统的性能和用户体验。通过详细的代码示例和实践操作,展示了如何实现这些高级功能,进一步提升了机器人的智能化水平。 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • Java中处理NullPointerException:getStackTrace()方法详解与实例代码 ... [详细]
author-avatar
大卫王
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有