接着Python和API:读取公共数据的成功组合-第一篇文章,我们继续讲后面的流程。
自定义标题
使用API时可能遇到的另一个标准是使用自定义标头。这些通常以开头X-,但不是必需的。API开发人员通常使用自定义标头从客户端发送或请求其他自定义信息。
有趣的事实:一些公司花了很多时间才变得有趣和创新,它们使用HTTP标头的方式并非本该被使用,例如,征求求职申请。
您可以使用字典来定义标题,也可以使用headers参数将其与您的请求一起发送.get()。例如,假设您要向API服务器发送一些请求ID,并且知道可以使用以下方法进行操作X-Request-Id:
如果您浏览request.headers字典,那么您会发现X-Request-Id在结尾处,以及随其他API请求默认提供的其他一些标头。
响应可能有许多有用的表头,但最重要的标头之一是Content-Type,它定义了响应中返回的内容的类型。
Content-Type
如今,大多数API使用JSON作为默认内容类型,但是您可能需要使用返回XML或其他媒体类型(例如图像或视频)的API。在这种情况下,内容类型将有所不同。
如果您使用TheDogAPI回顾前面的示例之一并尝试检查Content-Type标题,那么您会注意到它的定义方式为application/json:
除了特定类型的内容(在这种情况下为application/json),标头还可能返回响应内容的指定编码。
PlaceGOATAPI:这是一个非常愚蠢的API,可以返回不同大小的山羊图像,您可以在网站中将其用作占位符图像。
例如,如果您尝试从PlaceGOATAPI提取山羊的图像,则会注意到内容类型不再是application/json,而是定义为image/jpeg:
在这种情况下,Content-Type表头指出返回的内容是JPEG图像。您将在下一部分中学习如何查看此内容。
该Content-Type头部是非常重要的,你要知道如何处理的响应和如何处理它的内容。还有数百种其他可接受的内容类型,包括音频,视频,字体等。
回应内容
如您所知,在API响应中找到的内容类型将根据Content-Type表头而有所不同。为了根据不同的Content-Type标题正确读取响应内容,该requests程序包附带了几个不同的Response属性,您可以使用这些属性来处理响应数据:
.text以Unicode格式返回响应内容。.content以字节为单位返回响应内容。您已经使用了.text上面的属性。但是,对于某些特定类型的数据,例如图像和其他非文本数据,使用.content通常是一种更好的方法,即使它返回的结果与.text以下内容非常相似:
如您所见,.content与以前使用的之间没有太大的区别.text。但是,通过查看响应的
Content-Type表头,您可以看到内容是application/json;JSON对象。对于此类内容,该requests库包含一种特定的.json()方法,您可以使用该方法立即将API字节响应转换为Python数据结构:
如您所见,执行完之后response.json(),您将获得一个可以使用的字典,就像在Python中使用任何其他字典一样。
现在,回头看一下您最近使用PlaceGOATAPI运行的示例,尝试获取相同的山羊图像并查看其内容:
在这种情况下,因为您要请求图像,.content所以不是很有帮助。实际上,几乎是不可能理解的。但是,您知道这是JPEG图像,因此您可以尝试将其存储到文件中,然后查看会发生什么情况:
现在,如果打开要使用的文件夹,则将找到一个goat.jpeg文件,该文件是您刚刚使用API提取的山羊的随机图像。那不是很神奇吗?
HTTP方法
调用API时,可以使用几种不同的方法(也称为动词)来指定要执行的操作。例如,如果要获取一些数据,则可以使用方法GET;如果要创建一些数据,则可以使用方法POST。当使用API纯粹使用数据时,通常会遵循GET请求,但以下是最常用的方法及其典型用例的列表:
这四种方法通常被称作CRUD操作,因为他们让你reate,[READ,üPDATE和delete资源。
注意:还有另PATCH一种方法也与CRUD操作相关联,但是它比上面的四种更不常见。它用于进行部分修改,而不是使用完全替换资源PUT。
您可以阅读有关两者之间差异的PUTPATCH更多信息,并了解它们的不同需求。
如果您对其余的HTTP方法感到好奇,或者只是想了解更多有关已提到的HTTP方法的信息,请浏览Mozilla的文档。到目前为止,您仅用于.get()获取数据,但也可以将该requests包用于所有其他HTTP方法:
如果您在控制台上尝试使用它们,那么您会注意到它们中的大多数将返回MethodNotAllowed状态码。这是因为不是所有的终端将允许POST,PUT或DELETE方法。特别是当您使用公共API读取数据时,您会发现大多数API仅允许GET请求,因为不允许创建或更改现有数据。
查询参数
有时,当您调用API时,会得到大量不需要或不需要的数据。例如,当调用TheDogAPI的/breeds端点时,您会获得有关给定品种的很多信息。但是在某些情况下,您可能只想提取有关给定品种的某些信息。这就是查询参数的来源!
在线浏览时,您可能已经看到或使用了查询参数。例如,当您观看YouTube视频时,您的网址为