我在REST WS中遇到GET操作问题。我们有一个前端面板,带有几个用于搜索客户的过滤器。该面板包含以下过滤器:
在域模型中,我们有3个实体:
如何为此搜索实现REST GET操作?
GET .... / customers /?name = {name}& accountNum = {accountNumber}& licensePlate = {licensePlate} ?????
我认为这是错误的,因为accountNumber和licensePlate不属于客户资源。我不希望在预期的结果中使用这些属性。
我想创建像customerFilter这样的新资源,但是如果我必须返回客户资源则没有意义。
有什么想法吗?
谢谢!
答案 0 :(得分:1)
它不会假装是您问题的具体答案。但我认为这将澄清与GET方法相关的内容。
根据URI Specification - RFC 3986和Http Specification - RFC 7230,有三种方法可以将数据从客户端发送到服务器:通过查询,通过路径或通过 message-body 。
当您使用GET方法时,不建议使用message-body,因为可以缓存GET方法以改进性能内容,这些缓存可以忽略消息体或拒绝请求:
GET请求消息中的有效负载没有定义的语义; 在GET请求上发送有效负载主体可能会导致一些存在 拒绝请求的实现。
因此,您现在可以选择查询或路径。两者都采用以下格式的URL:
http://example.com/{path1}/{path2}?query1=value1&query2=value2
这些之间有什么区别?根据{{3}}和RFC 3986 - Path:
路径组件包含通常以分层结构组织的数据 表单,以及非分层查询组件中的数据 (第3.4节),用于识别范围内的资源 URI的方案和命名权限(如果有的话)。
查询组件包含非分层数据 路径组件中的数据(第3.3节)用于识别a URI的方案和命名权限范围内的资源 (如果有的话)。
作为结论,您可以设计任何您想要的东西。您可以使用例如:
GET .../customers?name={name}&accountNum={accountNumber}&licensePlate={licensePlate}
GET .../customers/{customerId}/
GET .../customers?customerId=12345
答案 1 :(得分:0)
我没有看到您的网址有任何问题,但您的担忧也是有效的。
在这种情况下,我们需要考虑一些事项。通过此搜索,您希望获得API调用的响应?
如果您希望响应应该包含有关客户的信息,当搜索条件得到满足时, / customer 是正确的。
如果您想要一些由客户,帐户和车辆信息组成的通用响应,您可以在网址中使用一些通用术语而不是客户。
我希望这会对你有所帮助。 谢谢:))