【发布时间】:2019-12-02 11:02:30
【问题描述】:
我目前正在研究 REST API。我喜欢 GraphQL 或 OData 的想法,它允许开发人员选择要返回的列/字段和关系记录。但是 GraphQL 需要迁移,并且 oData 的查询字符串太长。我在想是否可以使用 http-GET 方法传入 json 正文来存档。 例如,使用 http-Get 为客户检索客户名称“Luke Skywalker”
{
"customers":{
"Id":null,
"name":"Luke Skywalker",
"height":null,
"DateOfBirth":null,
"Cars":{
"manufacturer":"BMW",
"model":null,
"Plate":null
}
}
}
在下面获取相同的客户名称,但在发票信息上
{
"customers":{
"Id":null,
"name":"Luke Skywalker",
"height":null,
"DateOfBirth":null,
"Invoices":{
"Year":2019,
"Outstanding":Yes,
"OutstandingAmount":null
}
}
}
对这个方法有什么意见吗?
【问题讨论】:
-
A payload within a GET request message has no defined semantics; sending a payload body on a GET request might cause some existing implementations to reject the request.来源:RFC 7231 -
除此之外,GraphQL 只是 RPC。它与 REST 试图实现的目标几乎没有任何关系——客户端与服务器的分离。在 REST 中,客户端是服务器选项,客户端可以选择用于执行任务。这不需要 API 的内部知识,因为所需的一切都由 API 提供。另一方面,GraphQL 需要一些可用字段的内部知识,因此与 API 紧密耦合。这就是为什么 GraphQL 不适合 REST!
-
我的 REST API 仅针对我自己的应用程序,因此“在 GET 请求上发送有效负载主体可能会导致某些现有实现拒绝该请求。”不适用于我的情况。 PostMan 最近也开始允许 GET 在体内进行测试。 stackoverflow.com/questions/978061/http-get-with-request-body 如果不使用 HTTP GET 方法,那么 'Patch' 来实现 GraphQL 或 OData 类似功能呢?
标签: json rest graphql odata http-get