RESTful API for POST 中的多个路径参数与查询参数?

multiple path params vs. query params in a RESTful API for POST?

我正在尝试实施 restful API

我有一个名为程序的实体(描述和位置详细信息)

我有一个名为 Timing 的实体(程序 + 开始时间 + 结束时间)

我有一个名为 Check-In 的实体(时间 + 用户详细信息)

场景: 我需要签到时间可用,

对于 POST 请求,理想的 URL 应该如何, 选项A

POST /programme/:id/timing/:id/check-in
query param: null

选项 B

POST /check-in
request body: {programme=id,timing:id}

第一种方法将完全使用路径参数中的id并直接标识资源 在第二种方法中,消费者告诉资源类型,在过滤条件中提到 资源类型。

注意:我们将 UUID 用于程序和时序资源,这会使 URL 稍微大一些

两者都可以,但 GET 更适合请求信息。只要您的网址小于 4000 字节,就不会成为问题。

Caching 资源表示是 REST 架构风格中的重要考虑因素。

这在 HTTP 中的表达方式是,如果我们收到对不安全请求的非错误响应(如 POST ). URI 是缓存键,因此 POST 请求的 target-uri 标识哪个缓存条目将被逐出。

因此,在设计我们的协议时,我们会考虑哪些 资源 将被一个动作改变,并使用要改变的资源的标识符作为目标我们做出改变。

我们 GET 需要什么资源才能看到更改的效果?那应该是变更请求的目标。

POST /check-in
request body: {programme=id,timing:id}

如果 GET /check-in 是您希望在客户端上看到的东西,那么这种拼写就有意义了。从你的描述来看,这似乎不太正确 -- 听起来太粗糙了。

POST /programme/:id/timing/:id/check-in
query param: null

另一方面,这看起来可能过于精细;好像有人认为单一职责原则的正确应用是每个 POST 处理程序只做一件事。

是否有 check-outcheck-in 相得益彰?如果是这样,这些请求可能会去同一个地方

POST /programme/:id/timing/:id

action=check-in

POST /programme/:id/timing/:id

action=check-out

可能 programme 而不是 timing 是您域的正确粒度

POST /programme/:id

action=check-in&timing=:id

如果您要采用 Restful 方式,那么您希望识别适当的资源并对这些资源进行 CRUD 操作。

有3个资源: - 程序 - 用户 - Schedule(Timing 是一个糟糕的资源名称)-> belongs to -> Program - 注册->属于(用户,时间表)

所以要注册,我的 restful 端点看起来像

POST /注册 BODY {user_id: user1, schedule_id : s1}