在 REST 调用中使用 URI 作为参数值的最佳实践

2023-12-20

我正在设计一个 REST API,其中可以通过查询参数过滤一些资源。在某些情况下,这些过滤器值可能是来自同一 REST API 的资源。这会导致 URI 过长且难以阅读。虽然这本身并不是什么大问题,因为 URI 是要以编程方式创建和操作的,但它会带来一些痛苦的调试。我正在考虑允许将 URI 的快捷方式用作过滤器值,我想知道根据 REST 架构是否允许这样做以及是否有任何最佳实践。

例如:

我有一个可以获取 Java 类的资源。然后以下请求将为我提供所有 Java 类:

GET http://example.org/api/v1/class

假设我想要的所有子类CollectionJava 类,那么我将使用以下请求:

GET http://example.org/api/v1/class?has-supertype=http://example.org/api/v1/class/collection

该请求将返回我Vector, ArrayList以及所有其他子类CollectionJava 类。

不过该 URI 相当长。我已经可以通过允许来缩短它hs作为别名has-supertype。这会给我:

GET http://example.org/api/v1/class?hs=http://example.org/api/v1/class/collection

允许较短 URI 的另一种方法是允许 URI 前缀使用别名。例如,我可以定义class作为 URI 前缀的别名http://example.org/api/v1/class/。这会给我以下可能性:

GET http://example.org/api/v1/class?hs=class:collection

另一种可能性是完全删除类别名并始终在参数值前加上前缀http://example.org/api/v1/class/因为这是我唯一支持的事情。这将使对所有子类型的请求变为Collection into:

GET http://example.org/api/v1/class?hs=collection

原始请求 URI 的这些“简化”仍然符合 REST 架构的原则吗?还是我刚刚走入了深渊?

附录: URI 中可能同时存在多个过滤器。作为不同的参数,或作为单个参数的值列表。 沿着“实现接口 X 和/或接口 Y 的所有类”或“实现接口 X 且位于包 A.B.C 中的所有类”的思路思考(其中包也可寻址到 URI,例如http://example.org/api/v1/packages/a/b/c)


我会去做:

GET http://example.org/api/v1/class/java.util.Collection/subclasses

返回 RESTful API 中其他条目的链接列表,每个直接子类都有一个链接。我还将将该信息作为返回描述符的一部分提供:

GET http://example.org/api/v1/class/java.util.Collection

(这还包括指向前面特定查询的链接。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 REST 调用中使用 URI 作为参数值的最佳实践 的相关文章

  • Jersey 对空列表的响应为 null 而不是 {}

    我有一个使用 Jersey 的 JAX RS REST 服务 我使用 JAXB 进行 JSON 编组 即 XmlRootElement 其中一个方法返回使用 JPA 持久化的对象列表 当此列表包含条目时 它会按我的预期工作 例子 andro
  • 从网页安装 URI 方案的服务处理程序

    从 Chrome 访问 Google Mail 或 Google Calendar 时 地址栏中会出现小图标 允许为 URI 方案安装自定义服务处理程序 图中用红色方块标记 图标的工具提示是 This page wants to insta
  • 如何设计 RESTful 搜索/过滤? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我目前正在 PHP 中设计和实现 RESTful API 然而 我并没有成功地实现我最初的设计 GET users list of users
  • laravel - 使用请求类或输入类

    在宁静的控制器中 我应该使用哪个类来获取传递的变量 member gt email Input get email or member gt email Request get email 两种选择都适合我 但有什么区别 Input get
  • OnImageSavedCallback 返回的 OutputFileResults 具有无效的 Uri

    我正在使用 CameraX API 在我的 Android 应用程序中拍照 保存它们 然后从路径中显示它们 与之前的版本alpha 09我能够这样做onImageSaved File file 然而随着alpha 10我必须使用onImag
  • 当我有自定义身份验证模型时,如何登录 Django Rest 可浏览 API?

    我有一个自定义用户模型 如下所示account models py from django contrib auth modles import AbstractUser from django db models signals impo
  • 使用 C++ REST SDK Casablanca 发送 HTTP POST 请求以更新文件内容

    我正在尝试使用 C Rest sdk 更新 alfresco 服务器中的文件内容 我正在使用 alfresco CMIS url 发送请求 更具体地说 它是 Alfresco CMIS 浏览器绑定 我必须坚持浏览器绑定而不是原子绑定 当我发
  • 将 REST 服务与 Android 应用程序同步

    我使用一个 REST 服务来填充数据库中的信息 稍后由我的应用程序使用 我已经阅读了有关此事的多个主题 现在必须决定如何在 REST 服务和数据库之间实现同步 想象一个应用程序 它从谷歌金融 API 获取有关股票的信息并将其存储在数据库中
  • flutter中api调用哪种方式最好

    我是颤振开发的新手 最近听说了Dio和Http包用于api调用 这是 api 调用的最佳选择 如果有人有更好的api服务方式 CreateAccountRepository internal static final CreateAccou
  • 从 Delphi 访问 TRAKT API - 承载身份验证问题

    使用 TOauth2Authenticator TRESTClient TRESTRequest TRESTResponseDataSet TRESTResponse TFDmemtable 和 TDataSource 我成功连接到 Tra
  • React + Redux 和 REST API?

    我在 Node 中构建了一个简单的 CRUD 应用程序 并已在 Express 中完成了其余 API 的创建 我现在正在寻求添加前端功能 并希望使用 React Redux 作为学习练习 然而 似乎所有围绕此的教程都直接使用 Redux 访
  • 如何将带有自定义标头的任意 JSON 数据发送到 REST 服务器?

    TL DR 如何将 JSON 字符串发送到带有 auth 标头的 REST 主机 我尝试了 3 种不同的方法 发现一种适用于匿名类型 为什么我不能使用匿名类型 我需要设置一个名为 Group Name 的变量 并且连字符不是有效的 C 标识
  • Django Rest Framework 完整性错误捕获

    在 Django Rest Framework 中 我使用了序列化器 视图集和路由器方法 每当我在 django Rest 框架的 API 视图中发布故意错误时 它都会抛出完整性错误 有没有办法尝试捕获错误 例如如果数据中没有错误 则继续保
  • Spring Security:将 OAuth2 声明与角色映射以保护资源服务器端点

    我正在使用 Spring Boot 设置资源服务器 并使用 Spring Security 提供的 OAuth2 来保护端点 所以我使用 Spring Boot2 1 8 RELEASE例如使用 Spring Security5 1 6 R
  • 传递自定义类型查询参数

    如何接受自定义类型查询参数 public String detail QueryParam request final MYRequest request 上面的行在启动服务器时出现错误 jersey server model ModelV
  • 为休息服务实施 JUnit 测试

    我必须为我的休息服务实现一些 JUnit 测试 例如 这是我的休息服务之一 Path dni fe public class HelloWorld POST Path home Consumes MediaType APPLICATION
  • WCF 4.0 REST 上传 MS-Excel 文件

    我正在尝试通过 WCF REST 服务上传 MS Excel 文件 我使用了下面帖子中给出的解决方案 RESTful WCF服务图片上传问题 https stackoverflow com questions 664712 restful
  • 泽西宁静例外

    我面对的是泽西岛 2 7 这是我的服务 package edu srv rest import javax ws rs GET import javax ws rs POST import javax ws rs Path import j
  • 开发者环境-如何调用/消费其他微服务

    背景 我的环境 Java Play2 MySql 我在 Play2 gt S1 S2 S3 上编写了 3 个无状态 Restful 微服务 S1 消耗来自 S2 和 S3 的数据 因此 当用户点击 S1 时 该服务会异步调用 S2 S3 合
  • 使用 Swagger 的 Spring REST API 文档 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个可以帮助我生成 RESTful API 文档的工具 我的服务器是用Java编写的并使用S

随机推荐