在制作 RESTful api 时,是否有推荐的方法来处理涉及多个查询的 "route" 语法?

In making a RESTful api, is there a recommended way to handle "route" syntax involving multiple queries?

我开始开发一个应用程序,它将收到一条“路线”作为 json。也就是说,“路由”本身将作为字符串传递给包含在 json 字符串中的服务器。我想使用 RESTful 编写路由的标准方式,以便以后更容易调试。但举例如下:

contact            'get all contacts
contact/:id        'get the contact by id

Ugly areas:

contact/:id/jobs            'get the contact and all jobs assigned to contact
contact/:id/jobs/filter     'get the contact and all jobs assigned to contact, 
                            'where those jobs meet a certain criteria (filter)

现在我可以通过在“/jobs”上设置 CRUD 路由来避免在“jobs”上过于冗长的路由,我会这样做。但是,如果我想像上面那样限制返回给特定联系人的“工作”,有没有一种方法可以在不制定新约定的情况下表示该查询?

就 RESTful 体系结构而言,实际上,您拥有的很好。更严格的 RESTful 模式可能如下所示:

/jobs?contact_id=73284
/jobs?contact_id=73284&completed=1

其中 73284 是您联系人的唯一 ID,completed=1 表示过滤器。

了解严格的 RESTful 原则很有用,但实际上不可能 100% 合规。

一般来说,模式是:

METHOD:/resource/represention?any=query&string=you&want=here

METHOD:/resource?any=query&string=you&want=here

其中 METHOD 是 GET、PUT、POST、PATCH 或 DELETE。 resource 是一个 class 的东西(想想 table 名字),representation 是一个特定的东西(想想 table 行),查询参数就像你在 SQL.

中放入 WHERE 子句

在我看来,尝试使用查询,restful对我来说主要是有意义的

contact/:id/jobs=>contact/:id?populate=jobs // 如果你想联系工作,这意味着你仍然想要联系,只是一些额外的信息

contact/:id/jobs/filter=>contact/:id?populate=jobs&jobs[xx]=xx filter 也意味着额外限制

/jobs?contact_id=xx 这意味着你想要工作列表,还有一些额外的限制

REST 不关心您对资源标识符使用什么拼写约定。只要你的拼写符合RFC 3986描述的产生式规则就可以了。

如果你有很多类似的资源,使用URI Templates和变量扩展来定义你的标识符族会很方便。这允许客户端使用通用库来构建您的标识符,并允许您选择使用通用库为每个请求从目标 URI 中解析信息。

除了一些纯粹的机械问题(例如:使用正确的转义序列)之外,无论您是在查询中使用变量扩展,还是在路径段中,还是在每个段中使用多次,等等,都没有关系。

需要权衡取舍——路径段与 relative resolution 结合得很好; application/x-www-form-urlencoded 键值对与 HTML 形式结合得很好。

除此之外,机器不在乎。因此,请选择让您关心的某些人的事情变得更容易的任何拼写。