如何将结构化数据发送到检索对象的 REST 端点?应该使用哪个 HTTP 动词?

How to send structured data to a REST endpoint that retrieves objects? Which HTTP verb should be used?

我想构建一个 REST 端点来检索 对象,但我需要发送结构化数据作为查询参数(例如列表)。我想知道这些数据是否可以作为请求正文发送(请参见下面的示例)。我应该如何处理这个问题以坚持 REST 良好做法?我应该使用哪个 HTTP 动词?

URI:

http://localhost:8080/products

请求正文:

{
    "name" : "Computer",
    "categories" : [
        { 
            "id" : 1

        },
        { 
            "id" : 4
        }
    ]
}

回复:

[
    {
        "id": 2,
        "name": "Computer XP 2040",
        "price": 800
    },
    {
        "id": 1,
        "name": "HP Computer",
        "price": 2000
    },
    {
        "id": 7,
        "name": "Smart Computer",
        "price": 1200
    }
]

POST 对此不正确。如果您想坚持 RESTful 最佳实践,则必须对 uri 中的信息进行编码。

请注意,如果您不想这样做,POST 可能会更好,但由于这个问题是关于 REST 最佳实践(而不是一般的 http 服务),POST 是您的前往。

我会简单地将其编码为:

 GET /products?name=Computer&categories=1,4