RESTful Web Services——4: 理解与自定义可浏览的 API

导读:本篇文章讲解 RESTful Web Services——4: 理解与自定义可浏览的 API,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1,理解渲染 text/HTML 内容的能力

在前面,我们进行了许多更改,以使简单的RESTful Web 服务可以与内容协商类一起使用并提供许多内容渲染器。
我们为REST framework使用了默认配置,该配置就包括一个可生成txt/html内容的渲染器。

rest_framework.response.BrowsableAPIRenderer类就负责渲染 text/html 格式的内容,这个类使我们可以浏览API。
当在请求头中为Content-Type赋值为text/html时,REST framework就能为不同资源生成交互式且对人友好的HTML输出,此功能称为可浏览API(browsable API),因为它使我们能够使用web浏览器浏览API并轻松发出不同类型的HTTP请求。
可浏览API对测试数据库的CURD操作非常有用

接下来我们将编写并发送使用BrowsableAPIRenderer类在响应中提供text/html内容的HTTP请求。这样一来,在进入web浏览器并开始使用和自定义此功能之前,我们需要了解可浏览API的工作方式。

使用HTTPie发送一个请求头中包含”Accept: text/html”的GET请求:

http -v :8000/toys/ "Accept:text/html"
  • -v 选项将打印请求与响应的细节。

结果如下:

GET /toys/ HTTP/1.1
Accept: text/html
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: localhost:8000
User-Agent: HTTPie/2.4.0



HTTP/1.1 200 OK
Allow: POST, OPTIONS, GET
Content-Length: 8505
Content-Type: text/html; charset=utf-8
Date: Mon, 14 Jun 2021 08:53:31 GMT
Server: WSGIServer/0.2 CPython/3.7.6
Set-Cookie: csrftoken=M1Mf6mJbiTdZC7hx3JTkb1yqcRIOpte38y9eFbjEHSg8XC4pVVnIsXiHD7zqXrMh; expires=Mon, 13 Jun 2022 08:53:31 GMT; Max-Age=31449600; Path=/; SameSite=Lax
Vary: Accept, Cookie
X-Frame-Options: SAMEORIGIN

<!DOCTYPE html>
<html>
......
</html>

从结果可以看出,REST framework提供了一个HTM页面作为响应。
如果我们在任何Web浏览器中输入资源集合或资源的任何URL,则浏览器将执行需要HTML响应的HTTP GET请求,也就是说,请求头Accept项会设置为text/html,使用REST framework会创建一个将提供HTML响应的web服务,浏览器也将渲染这个页面。

默认情况下,BrowsableAPIRenderer类使用流行的Bootstrap前端组件库,这个页面可能包含以下元素:

  1. 不同的按钮可对资源或资源集合执行其他请求
  2. 显示JSON中资源或资源集合\的内容
  3. 具有允许我们提交POST、PUT和PATCH请求数据的字段的表单

REST framework使用模板和主题来呈现可浏览API的页面,可以自定义许多设置以使输出适应我们的特定要求。

2,使用web浏览器

浏览器访问http://localhost:8000/toys/,将发送一个使用application/json作为内容类型的GET请求,对该请求返回的JSON内容会被渲染为网页内容的一部分。
在这里插入图片描述
当我们使用可浏览的API时,Django使用有关资源或资源集合允许的方法来呈现适当的按钮,以允许我们执行相关的请求。
在上一个屏幕截图中,会注意到右上角有两个按钮:OPTIONS 和 GET。 我们将使用不同的按钮向RESTful Web服务发出其他请求。

可浏览的API最好的功能之一是,它让移动设备测试RESTful Web服务变得非常容易。 作为免责声明,一旦学习了如何利用可浏览的API,你将永远不会想要使用不提供此类功能的框架。

3,用可浏览的 API 发送 HTTP GET 请求

现在,我们将通过网络浏览器编写并发送另一个针对现有toy资源的HTTP GET请求.

输入现有toy资源的 URL ,例如 http:// localhost:8000/toys/2 ,这将编写 GET 请求并将其发送到http:// localhost:8000/toys/2,渲染后的网页将显示其执行结果,即toy资源的标头和JSON数据:
在这里插入图片描述
右上角的 GET 下拉按钮能向该资源再次发送 GET 请求。
其中的下拉选项 json 将展示没有没有指定相关内容类型的原始的 JSON 格式,实际上就是访问了http://localhost:8000/toys/3?format=json,效果如下:
在这里插入图片描述

4,用可浏览的 API 发送 HTTP POST请求

现在,我们要发送POST请求创建一个新实例。

访问http://127.0.0.1:8000/toys/,在页面下方可以提交POST请求。
在这里插入图片描述

  • Media type:此下拉菜单允许我们选择所需的解析器。该列表就是DEFAULT_PARSER_CLASSES项的值。
  • Content:此文本区域允许我们输入将发送的正文文本。内容必须与媒体类型下拉列表的所选值兼容。
  • POST:此按钮将使用选定的媒体类型和输入的内容来组成并发送带有适当键/值对的请求头和内容的HTTP POST请求。

5,用可浏览的 API 发送 HTTP PUT 请求

现在,我们要发送PUT请求更新一个实例。

访问http:// localhost:8000/toys/2,在页面下方可以提交PUT请求。
在这里插入图片描述

6,用可浏览的 API 发送 HTTP DELETE 请求

现在,我们要发送DELETE请求删除一个实例。

访问http:// localhost:8000/toys/2,在页面右上方可以提交 DELETE 请求。
在这里插入图片描述

7,用可浏览的 API 发送 HTTP OPTIONS 请求

现在,我们要发送OPTIONS 请求检查资源所允许的HTTP方法。

访问http:// localhost:8000/toys/4,在页面右上方点击OPTIONS ,结果如下:
在这里插入图片描述

  • renders表示该资源能被渲染的能力。
  • parses表示该资源能被解析的能力。

也发送 OPTIONS 请求检查资源集合所允许的HTTP方法:
在这里插入图片描述

检查由HTTP OPTIONS请求返回的特定资源或资源集合所允许HTTP方法是否已编码始终是一个好主意。 可浏览的API使我们可以轻松地测试对所有受支持的HTTP方法的请求是否正常。接下来将结合后面介绍的自动测试来完成这种功能。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/98118.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!