如何为 HTTP GET 的多个 Key-Value 参数设计 REST URI

2024-04-29

我正在设计一个 RESTful API。

一项服务应该提供多个键值对的查询功能。例如,客户端可以使用一个 HTTP GET 请求来查询不同的产品及其关联的数量。

客户想要查询金额为 44 的产品 1 和金额为 55 的产品 2。 我实际上不希望我的 URI 看起来像这样:

/produkt?productId1=1&productquantity1=44&productId2=2&productquantity2=55

因为我不知道查询了多少产品。

或者像这样:

/produkt?product=1,44&product=2,55

因为客户端怎么知道逗号之前是productId,逗号之后是数量。

有人有其他解决方案吗?或者通过一个请求提供查询多个产品的可能性不是 RESTful 吗?提供仅查询一种产品及其相关数量的可能性是否更好,如果客户想要查询更多产品,他们应该发送更多请求?


这是传递参数的一种想法:

/products?productDetail=[{"key":"key0","value":"key1"},{"key":"key2","value":"key2"},{"key":"key3","value":"key3"}]

where

[{"key":"key0","value":"key1"},{"key":"key2","value":"key2"},{"key":"key3","value":"key3"}]

是一个 JSON 表示List<kv> class

class kv {
    String key;
    String value;


    public kv(String key, String value) {
        super();
        this.key = key;
        this.value = value;
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

}

这样您就可以轻松转换查询参数productDetail in to List<kv> using

new Gson().fromJson(productDetail,kv.class);

您可以轻松地迭代所有元素。

另一个建议是,如果您不知道查询了多少产品,则使用POST对此提出要求。

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

如何为 HTTP GET 的多个 Key-Value 参数设计 REST URI 的相关文章

  • 为什么将 SOAP 用于 Web 服务?

    我读过教程 web service php mysql xml json http davidwalsh name web service php mysql xml json 看来一切都好 但是为什么我们应该使用soap 来提供网络服务呢
  • Java中的字节和字符转换

    如果我将一个字符转换为byte然后回到char 那个角色神秘地消失了 变成了别的东西 这怎么可能 这是代码 char a line 1 byte b byte a line 2 char c char b line 3 System out
  • 如何访问EmbeddedSolrServer实例的管理界面?

    在我的网络应用程序中 我正在运行org apache solr client solrj embedded EmbeddedSolrServer出于调试目的 我想访问管理界面 这就是我实例化服务器的方式 new EmbeddedSolrSe
  • 在 Spring Webflux 中执行阻塞 JDBC 调用

    我使用 Spring Webflux 和 Spring data jpa 使用 PostgreSql 作为后端数据库 我不想在进行数据库调用时阻塞主线程 例如find and save 为了实现同样的目标 我有一个主调度程序Controll
  • 使用 SSL 和代理设置的 Rest 客户端获取连接超时

    我正在使用带有忽略 ssl 的 Rest 客户端 它工作正常 但在将来我尝试使用客户端证书进行的生产中将无法工作 我有 ca 证书和客户端证书 我用它创建了一个客户端 但我收到错误 Exception in thread main com
  • 在 Java 中生成 LaTeX 输出 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有用于从 Java 生成 LaTeX 输出的 Java 库 渲染乳胶 JLatex数学 https
  • Map:为 Integer 和 Double 类型定义方法,但不为 String 类型定义方法

    我正在尝试定义一个方法putIfGreaterThan 为了我的新Map class 给定一个键 仅当新值大于旧值时 它才会用新值替换旧值 我知道我可以通过组合来实现这一点 通过有一个private final Map
  • Java:如果数组大小未知,如何初始化?

    我要求用户输入 1 到 100 之间的一些数字并将它们分配到一个数组中 数组大小未初始化 因为它取决于用户输入数字的次数 我应该如何分配数组长度 如果用户输入 5 6 7 8 9 5 个数字 则 int list becomes int l
  • SwingUtilities.invokeLater

    我的问题与SwingUtilities invokeLater 我应该什么时候使用它 每次需要更新 GUI 组件时都必须使用吗 它到底有什么作用 是否有替代方案 因为它听起来不直观并且添加了看似不必要的代码 Do I have to use
  • @Transactional 注解属于哪里?

    如果您将 Transactional in the DAO类和 或其方法 或者注释使用 DAO 对象调用的服务类是否更好 或者注释两个 层 是否有意义 我认为事务属于服务层 它是了解工作单元和用例的人 如果您将多个 DAO 注入到需要在单个
  • 如何根据从 jtextfield 和组合框接收的值将数据行添加到 Jtable

    我有一个JFrame表格有JTextFields JCombobox等等 我能够将这些值接收到变量 现在我想将接收到的数据添加到JTable当用户单击 添加 或类似的操作时在新行中 我创造了JTable使用 net beans 的问题是将这
  • 从侦听器中修改 JFrame [重复]

    这个问题在这里已经有答案了 可能的重复 如何在框架可见后调用 setUndecorated https stackoverflow com questions 875132 how to call setundecorated after
  • Tomcat下的Spring CXF Soap Web服务:找不到服务

    我正在尝试使用 CXF 和 Spring 设置一个在 Tomcat 上运行的简单 CXF Web 服务 我有一个 Web 应用程序初始化程序来引导 CXF servlet public class WebAppInitializer ext
  • Java/Hibernate - 异常:内部连接池已达到其最大大小,当前没有可用的连接

    我第一次在大学项目中使用 Hibernate 而且我还是个新手 我想我遵循了我的教授和我阅读的一些教程给出的所有指示 但我不断收到标题中的异常 Exception in thread main org hibernate Hibernate
  • 运行 Espresso 测试时在 Android studio 中找不到属性 android:forceQueryable

    我已经使用 android studio 录制了我的 Android 应用程序 Espresso 测试记录浓缩咖啡测试选项中Run菜单 在记录的最后 我用自己的文件名保存了测试 单击保存按钮后 IDE 会自动在以下位置创建文件Android
  • Java 中的连接路径

    In Python我可以连接两条路径os path join os path join foo bar gt foo bar 我正在尝试在 Java 中实现相同的目标 而不用担心是否OS is Unix Solaris or Windows
  • Java 9:AES-GCM 性能

    我进行了一个简单的测试来测量AES GCM https en wikipedia org wiki Galois Counter Mode表现在Java 9 通过在循环中加密字节缓冲区 结果有些令人困惑 本机 硬件 加速似乎有效 但并非总是
  • 可空日期列合并问题

    我在 Geronimo 应用程序服务器上使用 JPA 和下面的 openjpa 实现 我也在使用MySQL数据库 我在更新具有可为空 Date 属性的对象时遇到问题 当我尝试合并 Date 属性设置为 null 的实体时 不会生成 sql
  • Bipush 在 JVM 中如何工作?

    我知道 iload 接受整数 1 到 5 但是如何使用 bipush 指令扩展到更高的数字 特定整数如何与字节码一起存储 有几种不同的指令可用于推送整数常量 最小的是iconst 指令 这些只是一个字节 因为该值是在操作码本身中编码的 ic
  • 在edittext android中插入imageview

    我想将 imageview 放在 edittext 中 可能吗 我检查了 evernote 应用程序 它能够将照片放在编辑文本部分 我想让我的应用程序完全相同 我如何才能将从图库中选择的图像视图放入编辑文本中 我首先尝试将 imagevie

随机推荐

  • 如何仅在一个分支的提交上“git bisect”?

    在我目前正在进行的一个项目中 我们将每个功能保留为自己的分支 并在功能准备就绪时将其合并回主分支 每个功能分支内的提交可能包括大量 WIP 并破坏其他功能的功能 直到它完整且稳定 无论如何 由于主分支的提交是唯一 据说 稳定的提交 我想gi
  • 仅当其他对象成功创建时才创建对象

    我对 Django 相当陌生 并且不熟悉这种情况的最佳实践 在任何框架 语言中 而不仅仅是 python django 情况是 当用户第一次在我的网站上注册时 我想为他们创建一个 组织 如果它不存在 然后随后为他们创建一个引用该组织的用户
  • Swift(UI) 错误:无法在不可变值上使用变异成员:“self”是不可变的

    基本上我想做的是 如果您按下按钮 那么条目应该获得一个新的 CEntry 如果有人能帮助我那就太好了 谢谢 struct AView View var entries CEntries var body some View ZStack V
  • 将自定义操作添加到 UserModel 的管理页面

    是否有可能在 django UserModel 的管理页面中创建自定义操作 我希望自动将用户添加到组中 例如将他添加到员工中 设置一些额外的值等 当然还要创建收回这些更改的操作 感谢您的帮助 Import User在你的 admin py
  • 如何发送/接收 JSON?

    我知道这是一个愚蠢的问题 但我通常不进行 Web 编程 并且被要求发送一些 JSON 数据并接收一些回报 我用谷歌搜索 很清楚如何编码和解码 JSON 数据 但我对此很陌生 我不知道如何与给定的 URL 进行通信并说 这里有一些数据 请发回
  • 如何修复 Visual Studio 2015 Preview 上 SDL 2.0.3 未解析的外部问题?

    所以我收到以下错误 1 gt SDL2main lib SDL windows main obj error LNK2019 unresolved external symbol imp fprintf referenced in func
  • JMockit + Jetty 进行功能测试

    我在集成测试中使用 ShrinkWrap 启动 Jetty 服务器 Problem 示例项目中的 JUnit 测试试图模拟ForwardingServlet班级 但是 在这种具有嵌入式 Jetty Web 服务器的场景中 实际上有two该类
  • 获取 UIView 的当前角度/旋转/弧度?

    如何获取 UIView 当前的角度 旋转 弧度 你可以这样做 CGFloat radians atan2f yourView transform b yourView transform a CGFloat degrees radians
  • 使用 Maven 和 cxf-codegen-plugin 将 WSDL 客户端打包在 JAR 中

    我有一个 Maven 项目 它将使用许多 Web 服务 该应用程序将打包为 WAR 到目前为止 客户的代码已经生成cxf codegen plugin 在里面generate sources阶段 默认情况下 生成的源放入target gen
  • 使用 CDK 创建 ssh 密钥对/将其关联到 ec2 实例

    我正在使用新的云开发工具包 CDK 使用 Java 语言在 AWS 上构建基础设施 我在公共子网上使用堡垒主机与私有子网上的 RDS 实例进行通信 因此我通过堡垒主机上的 ssh 隧道从外部访问数据库 在私有子网上 我以这种方式创建了 Ba
  • 在 JavaScript 中实现撤消功能 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何在 javascript 中实现 ctrl z 经过多次谷歌搜索后 我偶然发现了 execCommand 我在用着document
  • 如何让 MediaRouteSelector 显示可用的 MiraCast 和 Chromecast 设备?

    我正在尝试让我的媒体路由选择器同时显示 MiraCast 和 Chromecast 设备 我有一个 Chromecast 接收器应用程序 并且还使用 Android 中的演示 API 因此理想情况下 用户只需单击媒体路由器按钮并选择他们拥有
  • bash:PWD 和 CURDIR 有什么区别?

    我的问题 我使用 Makefile 来运行docker runtarget 需要当前工作目录作为其参数之一 我使用任一 PWD or CURDIR build Dockerfile docker run lt PWD or CURDIR g
  • 如何在 .NET 4+ 中实现 ISerialized 而不违反继承安全规则?

    背景 野田时间 https nodatime org包含许多 可序列化的结构 虽然我不喜欢二进制序列化 但我们 早在 1 x 时间线中就收到了许多支持它的请求 我们通过实施ISerializable界面 我们最近收到了一份问题 报告 htt
  • 如何从一个端口为 Jetty 提供 https 和 http 服务?

    我知道这是一个重复的问题 但原始发帖者提出这个问题的原因是错误的 我并不是暗示我问它是为了right原因 但让我们看看 我们有一个在非标准端口号上运行的 Web 服务 尽管用户似乎能够记住端口号 但有时他们会错误地输入 http 而不是 h
  • C# 和 .NET 的“最佳”数据访问框架/方法是什么?

    编辑 我将其设为社区维基 因为它更适合协作格式 有多种方法可以从 NET 访问 SQL Server 和其他数据库 一切都有其优点和缺点 这永远不会是一个简单的问题 哪个是 最好的 答案永远是 这取决于 然而 我正在寻找在不同级别的系统背景
  • Meyers 的单例实现实际上是如何实现单例的

    我读了很多关于单例的内容 什么时候应该使用它们 什么时候不应该使用它们 以及如何安全地实现它们 我正在用 C 11 编写 并且遇到了 Meyer 的单例延迟初始化实现 如所示这个问题 https stackoverflow com ques
  • Typescript 使用装饰器获取参数值

    如何访问装饰器中方法参数的值 export const NullParameterCheck target Object key string index number gt how to get the value of the mark
  • distutils:如何将用户定义的参数传递给setup.py?

    如何将用户定义的参数从命令行和 setup cfg 配置文件传递到 distutils 的 setup py 脚本 我想编写一个 setup py 脚本 它接受我的包特定参数 例如 python setup py install foo m
  • 如何为 HTTP GET 的多个 Key-Value 参数设计 REST URI

    我正在设计一个 RESTful API 一项服务应该提供多个键值对的查询功能 例如 客户端可以使用一个 HTTP GET 请求来查询不同的产品及其关联的数量 客户想要查询金额为 44 的产品 1 和金额为 55 的产品 2 我实际上不希望我