REST 只涵盖 CRUD 吗?

Does REST only cover CRUD?

我正在编写一个与 API 通信的 AngularJS 应用程序,现在 API 正在遵循 REST 架构。

我了解 REST 的基础知识,但我仍然不明白 REST 是否涵盖了 CRUD 操作?例如,如果我正在构建一个社区网站并且我想让人们可以互相添加为朋友,那么 REST 是否以任何方式涵盖了这一点?搜索查询呢?如果没有,是否有任何其他推荐遵循的架构,或者我应该推出自己的架构?

此外,我是否应该为社区网站使用 REST?在很多情况下,它似乎不是最佳设计,但当我 google 周围时,我只得到结果说 REST 是最佳实践。例如 PUT /api/user/:id 不会很有用,因为您唯一能够更新的用户(除非您是管理员)是您自己。

这一切都取决于,REST 只是一种架构风格,并且(不幸的是,以多种形式)在世界范围内使用。我也在所有类型的应用程序中遵循 REST 规则,但尽量保持在 Richardson's Maturity Model 的第二级。为什么?因为我认为 HAL、HATEOAS 和所有 API 可发现性都是不必要的嗡嗡声——不幸的是文档仍然非常重要。

在设计 API 时需要考虑的是它是否会 public。如果不是,您可以 want/need 随心所欲(当然这不是个好主意)。如果它将成为 public,一致性开始发挥重要作用 - API 需要以一种既直观又易于使用的方式进行设计。例如。每次需要新的 operation 时引入新的端点并不是一个好主意——因此遵循 CRUD REST 规则似乎是合理的选择。当谈到超越 CRUD 时 - 是的,我已经创建了 APIs 在端点中使用动词 - 但它几乎总是最后的手段,老实说我并不感到内疚。

我觉得这个问题有点太宽泛了,不过我会尽力回答的。

REST only covers the CRUD operations?

不,它还包括其他操作。您必须将操作转换为 HTTP 方法和资源。资源可以有标识符:URI。带有 HTTP 方法的 URI 构成超链接。客户可以访问此超链接。您可以将操作名称等作为元数据附加到超链接,以便客户端可以使用它来识别操作。至少它应该是这样的。

What about search queries?

目前不支持通用查询,因为没有可用于描述通用查询的标准 RDF 词汇表。有非标准的解决方法,您可以使用它们或例如 SPARQL 端点。更多固定查询可以与 URI 模板一起使用。

Also, should I even be using REST for a community website?

据我所知,facebook 将它用于第 3 方客户端,因此您可以使用他们的 REST API 开发 facebook 应用程序。另一个优势是它比 SOAP 的扩展性更好。如果您目前不需要这些功能,那么您可以使用您更熟悉的其他功能。