以豆瓣网为例,讲解restful api设计规范

2024-06-23 15:18

本文主要是介绍以豆瓣网为例,讲解restful api设计规范,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是restful api

目前比较成熟的一套互联网应用程序的API设计理论

豆瓣电影api

  1. 应该尽量将API部署在专用域名之下
    http://api.douban.com/v2/user/1000001?apikey=XXX

  2. 应该将API的版本号放入URL
    http://api.douban.com/v2/user/1000001?apikey=XXX

  3. 在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。一般来说,数据库中的表都是同种记录的”集合”(collection),所以API中的名词也应该使用复数。
    http://api.douban.com/v2/book/:id (获取图书信息)
    http://api.douban.com/v2/movie/subject/:id (电影条目信息)
    http://api.douban.com/v2/music/:id (获取音乐信息)
    http://api.douban.com/v2/event/:id (获取同城活动)

  4. 对于资源的具体操作类型,由HTTP动词表示。常用的HTTP动词有下面四个(对应增/删/改/查)。
    GETselect):从服务器取出资源(一项或多项)。
    eg. 获取图书信息 GET http://api.douban.com/v2/book/:id\

    POSTcreate):在服务器新建一个资源。
    eg. 用户收藏某本图书 POST http://api.douban.com/v2/book/:id/collection

    PUTupdate):在服务器更新资源(客户端提供改变后的完整资源)。
    eg. 用户修改对某本图书的收藏 PUT http://api.douban.com/v2/book/:id/collection

    DELETEdelete):从服务器删除资源。
    eg. 用户删除某篇笔记 DELETE http://api.douban.com/v2/book/annotation/:id

  5. 如果记录数量很多,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回结果

    ?limit=10:指定返回记录的数量*
    eg. 获取图书信息 GET http://api.douban.com/v2/book/:id?limit=10

  6. 服务器向用户返回的状态码和提示信息
    每个状态码代表不同意思, 就像代号一样

    2系 代表正常返回
    4系 代表数据异常
    5系 代表服务器异常

错误码错误信息含义状态码
6000book_not_found图书不存在404
6002unauthorized_error没有修改权限403
6004review_content_short(should more than 150)书评内容过短(需多于150字)400
6006review_not_found书评不存在404
6007not_book_request不是豆瓣读书相关请求403
6008people_not_found用户不存在404
6009function_error服务器调用异常400
6010comment_too_long(should less than 350)短评字数过长(需少于350字)400
6011collection_exist(try PUT if you want to update)该图书已被收藏(如需更新请用PUT方法而不是POST)409
6012invalid_page_number(should be digit less than 1000000)非法页码(页码需要是小于1000000的数字)400
6013chapter_too_long(should less than 100)章节名过长(需小于100字)400

200(正常)
表示一切正常,返回的是正常请求结果。

302/307(临时重定向)
指出被请求的文档已被临时移动到别处,此文档的新的URL在Location响应头中给出。

304(未修改)
表示客户机缓存的版本是的,客户机应该继续使用它。

403(禁止)
服务器理解客户端请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置所致。

404(找不到)
服务器上不存在客户机所请求的资源。

500(内部服务器错误)
服务器端的CGI、ASP、JSP等程序发生错误。

接口安全

  1. API的身份认证应该使用OAuth 2.0框架。
  2. 技术团队自己约定的规则
    - 增加两个参数 time, token
    - time为时间戳, 用于判断接口请求是否超时
    - token为时间戳加密后的字符串, 加密规则只有你们技术团队自己知道

参考资料

  • RESTful API 设计指南 - 阮一峰的网络日志
  • thinkphp5开发restful-api接口 - 网易云课堂
  • 豆瓣movie_v2

联系作者

  • CSDN博客:http://blog.csdn.net/u012104219
  • 知乎专栏:https://zhuanlan.zhihu.com/frankfeekr
  • Github:https://github.com/frank-lam
  • Email:frank_lin@whu.edu.cn

如果你觉得不错的话,不妨打赏一下,这样我就有更大的动力去完善它,优化它。

这篇关于以豆瓣网为例,讲解restful api设计规范的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1087521

相关文章

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

C++ vector的常见用法超详细讲解

《C++vector的常见用法超详细讲解》:本文主要介绍C++vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,... 目录1、vector的定义2、vector常用初始化方法1、使编程用花括号直接赋值2、使用圆括号赋值3、ve

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

C++快速排序超详细讲解

《C++快速排序超详细讲解》快速排序是一种高效的排序算法,通过分治法将数组划分为两部分,递归排序,直到整个数组有序,通过代码解析和示例,详细解释了快速排序的工作原理和实现过程,需要的朋友可以参考下... 目录一、快速排序原理二、快速排序标准代码三、代码解析四、使用while循环的快速排序1.代码代码1.由快

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

Java集合中的List超详细讲解

《Java集合中的List超详细讲解》本文详细介绍了Java集合框架中的List接口,包括其在集合中的位置、继承体系、常用操作和代码示例,以及不同实现类(如ArrayList、LinkedList和V... 目录一,List的继承体系二,List的常用操作及代码示例1,创建List实例2,增加元素3,访问元

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何