当前位置: 首页 > 知识库问答 >
问题:

正确的Restful API设计指南

颛孙钱青
2023-03-14

在制作后端服务器之前,我正在设计Restful API。这项服务是小型Instagram,我想知道我的restful设计是否符合REST原则。

认证

  • 创建帐户:POST /auth/user
  • 删除帐户:删除 /auth/user
  • 登录:发布 /auth/session
  • 注销:删除 /auth/session

邮政

    < li >加载摘要:获取/发布 < li >创建帖子:帖子/帖子 < li >读取post : GET /posts/:post_id < li >删除帖子:DELETE /posts/:post_id < li >阅读评论:GET/posts/:post _ id/comments < li >创建评论:POST/posts/:POST _ id/comments < li >删除评论:Delete/posts/:post _ id/comments/:comment _ id < li >创建相似内容:POST /posts/:post_id/likes < Li > Read likes:GET/posts/:post _ id/likes < li >删除like:Delete/posts/:post _ id/likes/:like _ id

跟随

  • 阅读以下内容:GET /followings/:user_id
  • 创建如下:POST /followings/:user_id
  • 删除以下内容:删除 /followings/:user_id
  • 阅读关注者:GET /followers/:user_id

活动

  • 阅读活动 : GET /活动

搜索

    < li >读取search:GET/filter/:search _ term

探讨

    < li >阅读explore : GET /similars

我是Restful API设计的新手,所以我想为我的设计提供建议或修改。这符合原则吗?

共有1个答案

柳翼
2023-03-14

我是Restful API设计的新手,所以我想为我的设计提供建议或修改。这符合原则吗?

REST不关心资源标识符的拼写。它不在乎你如何设计你的资源。它真正关心的是超媒体和缓存,以及使用标准化的事物定义,以便我们可以使用通用组件来实现有用的工作。

GET /activities
GET /95d9f08a-fb79-4a18-a630-b2e31ad7039a

这两个URI都很好;通用组件在这两种情况下都会做正确的事情,因为机器不关心拼写(假设您使用的拼写符合RFC 3986)——标识符就是标识符,机器不会试图从中提取任何语义信息。这意味着你的服务器,根据自己的权限,可以选择你想要的任何拼写。

换句话说,我们对URI的拼写大惊小怪,就像我们对变量名称的拼写大惊小怪一样——是为了让其他人更容易理解。因此,任何内部一致的拼写约定都可以,就像任何命名变量/函数/类的一致约定都可以一样。

使用GET进行所有读操作,使用POST进行所有写操作都很好——毕竟,web取得了灾难性的成功。POST有点有趣,因为您希望确保理解缓存失效的含义。

 类似资料:
  • 我必须给出使用Site Minder的SSO架构的建议。我们几乎没有J2EE应用程序。这些J2EE应用程序设计为在SSO提供者进行身份验证后,当http头包含信息时工作。我们一直保持应用程序SSO提供程序不可知。这意味着我们只依赖SSO提供程序的头。这在RSA作为SSO提供程序的情况下运行良好。 现在SiteMinder提出了另一种架构。请求的流动方式是 带IIS的SiteMinder- 要崩溃,

  • 我的问题是我应该让(板中的凹陷孔)成为的属性还是应该让成为的属性 我有以下工程分析课程: 然后我有代表各种关节的类 沉头孔仅适用于,但我需要验证用户输入的板材厚度是否大于沉头孔的深度。我只是在底板中将沉头孔设置为null,还是将沉头孔属性放在关节类中更好?或者我应该使用其他模式,比如子类? 我将涂层和材料作为属性添加到每个零件中,因为它太过冗长,无法添加到接头中,例如: 我可能可以让它在任何一种情

  • thinkphp5编写的restful风格的API,集API请求处理,权限认证,自动生成文档等功能

  • 问题内容: 我已经浏览了一些有关如何以及为何akka无法保证消息传递的帖子。该文档,这个讨论和小组其他讨论做解释它做好。 我对akka来说还很陌生,希望了解适合表壳的设计。例如说我有3个不同的角色,都在不同的机器上。一个负责食谱,另一个负责历史,最后一个负责技术书籍。 我在另一台机器上有个主要演员。假设对主角有一个查询,以搜索是否有可用的书。主参与者将请求发送到3个远程参与者,并期望结果。所以我这

  • 问题内容: 例如,我有实体类: 接下来,我添加新的实体类: 接下来,我可以添加越来越多的实体类。 而且,此刻我想:我可以/必须以逻辑结构绑定/连接我的实体类,还是没有? 我的意思是说?我尝试解释一下: 要点1:所有这些类:,以及其他- 。 想法1:需要通过接口或抽象类对此类进行逻辑绑定。 第2点:我看到,所有实体类都有相同的方法:和。 想法2:需要避免在所有类中声明此方法。 我的解决方案: 添加界

  • 前言:我试图在关系数据库的MVC体系结构中使用存储库模式。 我最近开始学习PHP中的TDD,我意识到我的数据库与应用程序的其余部分耦合得太紧密了。我读过关于存储库和使用IoC容器将其“注入”到我的控制器中的文章。很酷的东西。但现在有一些关于存储库设计的实际问题。请考虑以下示例。 所有这些查找方法都使用选择所有字段()方法。然而,在我的应用程序中,我总是试图限制我得到的字段的数量,因为这经常增加开销