但是,我也曾遇到过一些让 REST 蒙羞的 API 例子,错误使用 HTTP 状态码、纯文本响应、不一致的模式、插入端点中动词......因此我决定写篇文章分享一下,在设计 REST API 时的最佳实践。以下是关于设计优秀REST API 的一些建议、提示和指导,帮助您让消费者(以及开发人员)满意。 1....在处理应用程序/编程客户端(例如,通过Python中的requests库与您的API交互的另一个服务/API)时,这一点尤为重要——其中一些客户端依赖于此标头来准确解码响应。 3....我个人建议使用查询字符串参数直接过滤books资源: GET: /books?author=Cagan 这显然意味着:“获取所有名为Cagan 的作者所写的书”,对吧。 9....有一天,当我将REST API集成到我的一个项目中时,每次调用都收到HTTP 500内部错误。
你是否曾因为代理服务器配置不当而遭遇403错误代码?或是在测试API时收到未授权访问错误?这些常见的客户端错误不仅令人头疼,还会影响工作效率。...它允许开发者发送 HTTP 请求并处理响应,从而轻松与网络资源进行交互。通过 Requests 库,用户可以构建 RESTful API,获取网页内容,进行数据采集等操作。...处理403错误代码 当用户配置代理并尝试访问某些资源时,可能会遇到403错误代码,这通常表示请求被拒绝,因而造成了访问错误。引起此类错误的原因有很多,但通常与权限设置有关。...理解如何处理此类错误是构建网络应用的关键部分,尤其是与 APi 接口交互时。用户可以通过查看服务器的响应信息,了解更详细的错误状态,并采取相应的解决措施。...用户应仔细观察 API 返回的信息,以确认所有设置均已生效。 诊断和解决代理问题 常见的代理错误及其原因 在使用代理时,用户可能会遇到多种错误,其中403 Unauthorized 是最常见的一种。
另一种选择是使用Token Introspection规范来构建 API 来验证访问令牌。...过期令牌 如果您的服务使用短期访问令牌和长期刷新令牌,那么您需要确保在应用程序使用过期令牌发出请求时返回正确的错误响应。...返回带有标头的 HTTP 401 响应,WWW-Authenticate如下所述。如果您的 API 通常返回 JSON 响应,那么您也可以返回具有相同错误信息的 JSON 正文。...错误代码和未经授权的访问 如果访问令牌不允许访问所请求的资源,或者如果请求中没有访问令牌,则服务器必须使用 HTTP 401 响应进行回复,并在响应中包含一个标头WWW-Authenticate。...“scope”值允许资源服务器指示访问资源所需的范围列表,因此应用程序可以在启动授权流程时向用户请求适当的范围。根据发生的错误类型,响应还应包括适当的“错误”值。
1.Web API接口 接口:规定了提交请求参数的请求方式、访问其可以获取相应的反馈数据的url链接,四部分:url链接 + 请求方式 + 请求参数 + 响应数据。.../books - get请求:获取所有书 https://api.baidu.com/books/1 - get请求:获取主键为1的书 post:新增单个或多个资源 https://api.baidu.com...://api.baidu.com/books/1 - put请求:整体修改主键为1的书,完成单改,返回单个结果对象 https://api.baidu.com/books/ 整体修改多个数据,提供多个数据字典的数字...多删,提供多个资源主键数据,完成群删,不做任何资源返回(一般我们会返回结果信息:成功|失败) https://api.baidu.com/books/(pk)/ 2.2响应状态码 网络状态码和网络状态信息捆绑出现...响应状态码4xx 403:请求无权限 404:请求路径不存在 405:请求方法不存在 2.2.4 服务器异常 响应状态码5xx 500:服务器异常 2.3 响应结果 2.3.1 响应数据要有状态码、
最近几年REST API越来越流行,特别是随着微服务的概念被广泛接受和应用,很多Web Service都使用了REST API。...这样的API,不仅没体现出REST API的优势,反而搞成“四不像”,增加了开发维护成本。 如何理解REST 要规范使用RESTful架构,首先要理解什么是REST。...301(Moved Permanently):表示资源的URI已永久性更改,需要在响应内容中获取新的URI。...302(Moved Temporarily):表示资源的URI已临时性更改,需要在响应内容中获取新的URI。 400(Bad Request):表示请求有问题,如参数错误等。...又如,查询某个地图资源,地图资源的表述中如果包含了各方向的相邻地图资源,则当客户端的鼠标移到屏幕边缘时,就可以获取到该方向上的地图资源了;或者地图资源的表述中包含景点、餐馆等资源URI,则可以进行相应的操作
函数下载文件时,有时会遇到“HTTP Error 403: Forbidden”的错误。...三、错误代码示例 以下是一个可能导致403 Forbidden错误的简单代码示例: from urllib.request import urlopen url = "https://example.com...五、注意事项 遵守服务器规则:在尝试绕过访问控制时,请确保你有权访问该资源,并遵守服务器的使用条款和条件。...使用更高级的库:对于更复杂的网络请求,可以考虑使用requests库,它提供了更友好的API和更强大的功能。...通过遵循上述建议,你应该能够解决在使用urlopen或urlretrieve时遇到的403 Forbidden错误。
有许多情况可能导致 Web 服务器响应具有特定错误代码的请求——我们将介绍常见的潜在原因和解决方案。...一般故障排除提示 使用 Web 浏览器测试 Web 服务器时,更改服务器后刷新浏览器 检查服务器日志以获取有关服务器如何处理请求的更多详细信息。...清除浏览器的缓存和 cookie 可以解决这个问题 由于浏览器故障导致请求格式错误 手动形成 HTTP 请求时由于人为错误导致的畸形请求(例如使用curl不正确) 401 未授权 401 状态代码或Unauthorized...文件权限 当运行 Web 服务器进程的用户没有足够的权限读取正在访问的文件时,通常会发生 403 错误。...(通常是有意为之)是使用 .htaccess文件。
1.2 Response(响应) drf 提供了一个响应类Response,使用该类构造响应对象时,响应的具体数据内容会被转换(render渲染)成符合前端需求的类型。...json渲染器 # renderer_classes=[BrowsableAPIRenderer,] # 配置使用浏览API渲染器 在全局配置使用,即对所有的视图类、所有的请求都生效。...参数说明: data: 为响应准备的序列化处理后的数据; status: 状态码,默认200; template_name: 模板名称,如果使用HTMLRenderer 时需指明; headers: 用于存放响应头信息的字典...例如使用APIView简单的实现五个增删查改的API接口。...3.2 action 在视图集中,我们可以通过action对象属性来获取当前请求视图集时的action动作是哪个。除了默认的方法动作外,还可以添加自定义动作。
当nginx发生内部错误时,比如说404、403、500等错误,默认会跳转到nginx自带的错误页面。但是使用error_page指令可以修改默认错误页面,并且可以指定跳转的url或者文件路径。...location, location 中的if字段 使用举例跳转到指定页面其原理是响应到错误代码后,导向指定的路由,然后再由指定的路由处理,如下当错误代码是404时,相当于访问http://localhost...50x.html; location = /50x.html { root /usr/share/nginx/html; }跳转到指定网址其原理是响应到错误代码后...,302(临时重定向到目标网址),如下当错误代码为404时,导向https://www.csdn.net error_page 404 403 500 https://www.csdn.net...= 和不加 = 的区别,加了 = 表示响应为指定的 http status code ,默认为 200,不加 = 为原错误的状态码~# 这样可以访问错误页面时 http status 为 404 ,并且页面内容是
但在使用 GraphQL 时,你可以使用查询语法定义所需信息的结构,然后通过单个 API 请求就可以获取所需的信息。...与书籍相关的其他信息通过 Google Books API 获得。...这个示例使用 MySQL 数据库和 Google Books API 作为数据源 这个示例的所有源代码都可以在 Github 上找到。...在创建所需的记录之前,需要分析一下根据指定 ISBN 从 Google Books API 获取的的 JSON 响应消息的格式。它返回一个 JSON 对象,其中包含了一个“items”的数组。...你可以看到这里的一些评级是“null”,因为 Google Books API 调用返回的一些 JSON 响应没有包含这些信息。
返回响应:状态码(如200成功)、响应头(如Content-Type)和响应体(HTML/JSON数据)。断开连接:默认短连接,可通过Connection: keep-alive复用TCP连接。...示例:用curl命令模拟请求curl -X GET "https://example.com/api/books" \-H "User-Agent: Mozilla/5.0" \-H "Accept:...状态码:200:成功;404:页面不存在;500:服务器错误;403:权限不足(常因反爬触发)。请求头:User-Agent:标识客户端类型(浏览器/爬虫)。...A:设置请求头(User-Agent)、控制请求频率(随机延迟)、使用会话(Session)保持Cookie,必要时模拟人类操作(如滚动页面)。Q4:动态加载的数据怎么抓?...A:通过浏览器开发者工具分析XHR请求,直接抓取API接口;或用Selenium驱动真实浏览器渲染页面。Q5:爬虫合法吗?
返回响应:状态码(如200成功)、响应头(如Content-Type)和响应体(HTML/JSON数据)。 断开连接:默认短连接,可通过Connection: keep-alive复用TCP连接。...示例:用curl命令模拟请求 curl -X GET "https://example.com/api/books" \ -H "User-Agent: Mozilla/5.0" \ -H "Accept...状态码: 200:成功;404:页面不存在;500:服务器错误;403:权限不足(常因反爬触发)。 请求头: User-Agent:标识客户端类型(浏览器/爬虫)。...A:设置请求头(User-Agent)、控制请求频率(随机延迟)、使用会话(Session)保持Cookie,必要时模拟人类操作(如滚动页面)。 Q4:动态加载的数据怎么抓?...A:通过浏览器开发者工具分析XHR请求,直接抓取API接口;或用Selenium驱动真实浏览器渲染页面。 Q5:爬虫合法吗?
最常见的错误: 404–找不到文件或者目录不存在 403–找不到默认首页 505–服务器内部错误 信息提示(这些状态代码表示临时的响应。...客户端在收到常规响应之前,应准备接收一个或多个1xx响应): 100–继续 101–切换协议 成功(这类状态代码表明服务器成功地接受了客户端请求): 200–确定(客户端请求已成功) 201–已创建...401.5–ISAPI/CGI应用程序授权失败 401.7–访问被Web服务器上的URL授权策略拒绝(这个错误代码为IIS6.0所专用) 403–禁止访问(IIS定义了许多不同的403错误,它们指明更为具体的错误原因...这个错误代码为IIS6.0所专用 500.100–内部ASP错误 501–页眉值指定了未实现的配置 502–Web服务器用作网关或代理服务器时收到了无效响应 502.1–CGI应用程序超时 502.2...这个错误代码为IIS6.0所专用 504–网关超时 原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明转载自:网站服务器错误代码介绍
理论上来说,任何人都可以在5分钟内快速启动一个数据API。无论是Node.js、Golang,还是Python。 我们将探索构建RESTful API时应该考虑的13个最佳实践。...对于这种情况,RESTful API也有一个解决方案: GET api.com/authors/3/books 最后,假如想为ID为3的作者删除ID为5的图书,该怎么办呢?...因此,你会调用以下端点:GET api.com/authors 。 当你阅读请求时,你无法判断API响应将只包含一个或所有作者。出于这个原因,API端点应该使用复数资源。...通常,API的版本号被纳入API的URL中,比如:api.com/v1/authors/3/books。 通过HTTP头发送元数据 HTTP头允许客户在其请求中发送额外的信息。...此外,还返回了一个内部错误代码,以便开发人员查找具体的错误。这允许开发人员快速查找有关该错误的更多信息。 选择正确的API框架 许多框架存在于不同的编程语言中。
Facebook、GitHub、Google 以及其他许多巨头都需要一种服务和消费数据的方式。在当今的开发环境中,RESTful API 仍然是服务和消费数据的最佳选择之一。...我们将探讨在构建 RESTful API 时应考虑的 13 种最佳实践。但首先,让我们快速阐明 RESTful API。 什么是 RESTful API?...因此,你将调用以下端点:GET api.com/authors。 当你读取请求时,你无法判断 API 响应是否只包含一个或所有作者。因此,API 端点应该使用复数资源。...通常,API 的版本号包含在 API URL 中,例如:api.com/v1/authors/3/books。 8.通过 HTTP 标头发送元数据 HTTP 标头允许客户端随其请求发送其他信息。...此外,还返回内部错误代码,供开发人员查找特定错误,这使开发人员可以快速查找有关该错误的更多信息。
使用你喜欢的文本编辑器打开 main.py 编写如下代码。..._open() 上面程序主要功能是实现日志按天分割的功能,这个功能可以让我们更加方便的定位应用在使用过程中出现的问题。 统一的接口响应 我们这个项目是前后端分离的应用,通过接口进行前后端通信的。...接口的返回信息(响应)需要统一格式,这包含接口出错时的信息。为了实现这一目标,我们需要自己封装一个统一的接口响应方法。...= { "http_code": 404, "code": "notFound", "message": "Resource not found" } FORBIDDEN_403.../author') from app.books import books_bp app.register_blueprint(books_bp,url_prefix='/api/books
@Api 作用在类上,用来标注该类具体实现内容。表示标识这个类是swagger的资源 参数: tags:可以使用tags()允许您为操作设置多个标签的属性,而不是使用该属性。...@ApiOperation(value = "获取图书信息", notes = "获取图书信息", response = Book.class...(id); } @ApiResponse 用于方法,描述操作的可能响应。...ApiResponse(code = 500, message = "2001:因输入数据问题导致的报错"), @ApiResponse(code = 500, message = "403...@ResponseHeader 响应头设置,使用方法。
api.baidu.com/books | api.baidu.com/books/(pk) 5) 请求方式有多种,用一个url处理如何保证不混乱 - 通过请求方式标识操作资源的方式.../books get 获取所有 /books post 增加一个(多个) /books/(pk) delete 删除一个...api.baidu.com/books/?.../api/ API很简单 版本: URL,如:https://api.example.com/v1/ 请求头,跨域时,引发发送多次请求 路径,视网络上任何东西都是资源,均使用名词表示...403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
_tcp.cluster0-on1ek.mongodb.net 以上正是我在链接 MongoDB Alats 过程中遇到的问题,这里再多提下,希望能对你有帮助,因为这花费了我很长时间,尝试使用 Google...API 的设计要保证职责单一、清晰合理、便于他人快速理解使用等原则,而 REST 也是 API 设计的一种准则,同时它也是一种架构思想,用于客户端与服务端资源传递与交互。...以下是我们将要完成的 REST API 规划,包含四个 CRUD 操作 CRUD API Routes Description POST /books 增加一本书 GET /books 获取所有书籍列表...这个错误是因为你已经定义了一个 Schema,之后又重复定义该 Scheme 导致的,错误代码如下所示: module.exports = mongoose.model('Books', BooksSchema...); 编写业务逻辑 Books 将业务逻辑处理放在 Books 这个类里面,并且可以不依赖于外部的任何服务,this.BooksModel 这个在测试时可以模拟数据进行传入。
本文将介绍如何设计易于理解和使用的 API,并且借助 Docker api 的实践说明。...没有统一的规定,但是我们通常操作的数据多数是一个集合,比如 GET /books ,所以我们就使用复数。...统一规范,建议都使用复数 URL, 比如 获取 id = 2 的书 GET /books/2 要好于 GET /book/2。...一般来说,API 不会向用户透露服务器的详细信息,所以只要两个状态码就够了。 500 Internal Server Error:客户端请求有效,服务器处理时发生了意外。...服务器响应 3.1 不要返回纯文本 API 返回的数据格式,不应该是纯文本,而应该是一个 JSON 对象,因为这样才能返回标准的结构化数据。