我正在编写一个与API通信的AngularJS应用程序,现在API正在遵循REST架构。
我了解REST的基础知识,但是如果REST 仅涵盖CRUD操作,我还是不明白吗?例如,如果我建立一个社区网站,并且我希望人们可以互相添加为朋友,那么REST是否会以任何方式覆盖它?搜索查询怎么样?如果没有,是否有其他建筑建议遵循,或者我应该自己推出?
另外,我是否应该在社区网站上使用REST?在很多情况下,它似乎不是最佳设计,但当我谷歌时,我只得到结果说REST是最好的做法。例如,PUT / api / user /:id不会非常有用,因为您唯一能够更新的用户(除非您是管理员)是您自己。
答案 0 :(得分:2)
一切都取决于,REST只是一种建筑风格,并且(很多形式)不幸地在全世界使用。我还在所有类型的应用程序中遵循REST规则,但尝试保持在Richardson's Maturity Model的第二级。为什么?由于我认为HAL,HATEOAS和所有API的可发现性都是不必要的嗡嗡声 - 遗憾的是,文档仍然非常重要。
设计API时需要考虑的是它是否公开。如果不是,你可以随心所欲(当然这不是个好主意)。如果要公开,一致性开始发挥重要作用 - API需要设计为既直观又易于使用。例如。每次需要新的操作时引入新端点并不是一个好主意 - 因此遵循CRUD REST规则似乎是合理的选择。当谈到超越CRUD时 - 是的,我在终端创建了带动词的API - 但它几乎总是最后的手段,说实话我并不感到内疚。
答案 1 :(得分:1)
我认为这个问题有点过于宽泛,但我会尽力回答。
REST仅涵盖CRUD操作?
不,它也包括其他操作。您必须将操作转换为HTTP方法和资源。资源可以具有标识符:URI。具有HTTP方法的URI组成超链接。客户端可以跟随此超链接。您可以将操作名称等附加到超链接作为元数据,因此客户端可以使用它来识别操作。至少它应该如何运作。
搜索查询怎么样?
目前不支持常规查询,因为没有可用于描述常规查询的标准RDF词汇表。有非标准的解决方法,您可以使用它们或例如SPARQL端点。更多固定查询可以与URI模板一起使用。
另外,我是否应该将REST用于社区网站?
据我所知,facebook将它用于第三方客户端,因此您可以使用REST API开发Facebook应用程序。它比SOAP更好地扩展的另一个优点。如果您目前不需要这些功能,那么您可以使用其他更熟悉的功能。