什么是 Web API...以及如何使用 Python 创建一个?
我们每次都听到它......“API”的含义是应用程序编程接口;但究竟什么是 API?这是什么一回事呢? 很多人对 API 是什么给出了自己的描述。第一个让我了解它是什么的场景(它在今天的编程模因中仍然很流行)是餐厅的想法。客户,也就是前端客户端,想吃点东西,可以看成是资源。该资源是从一些后端逻辑代码或一些数据库中获取的,在这种情况下是厨师或厨师。然后是服务员,随时准备服务和交付(至少大部分时间,
我们每次都听到它......“API”的含义是应用程序编程接口;但究竟什么是 API?这是什么一回事呢?
很多人对 API 是什么给出了自己的描述。第一个让我了解它是什么的场景(它在今天的编程模因中仍然很流行)是餐厅的想法。客户,也就是前端客户端,想吃点东西,可以看成是资源。该资源是从一些后端逻辑代码或一些数据库中获取的,在这种情况下是厨师或厨师。然后是服务员,随时准备服务和交付(至少大部分时间,但不是我来自哪里。你自己拿食物)。这里的服务员就是API。现在,服务员拿着菜单走近顾客,顾客就任何食物选择提出要求。服务员将此请求发送给厨师(后端架构),厨师准备好食物(数据),并将其传递给服务员(API),服务员将食物(本例中的响应)返回给客户(前端客户端)。
所以基本上,API 是前端(客户)和后端(厨师)worlds 之间的某种类型的通信点。
我能够想出的另一种情况是(disclaimer:我不是电气工程极客,所以我在这里可能是错的)......墙壁插座的想法,对吗?电力被创造出来,并准备好供我们使用。现在我们有了每天使用的小工具,至少每天都需要供电。但是没有这些墙上的插座,我们就不能用电。所以我将 API 视为墙上插座,连接到电力(后端点),并将电流传递到“外部世界”,这使得我们可以为我们的小工具充电......是的。我想我们现在明白了。
在当今的科技时代,大多数应用程序(如果不是全部)都依赖于 API。这是因为每秒有数百万数据从一个点传输到另一个点,并且这些数据需要随时可用。我们每天都在使用 API,即使我们不知道自己在使用它们。当我们检查我们的银行账户余额、观看 YouTube 视频或发布推文时,甚至在我们的天气应用程序中,我们都会使用它们。 API 无处不在。
Web API 架构的类型:
-
具象状态转移(REST)
-
远程过程调用(RPC)
-
肥皂
-
gRPC
-
GraphQL
(现在,老实说,这只是我使用过的 REST 架构。**低语“失望”。我可能会尝试下一个 GraphQL)。
那么,什么是 REST API? REST API 是遵循 REST 架构准则的 API。 REST 架构就是其中之一,其主要目的是将数据从一个组件传输到另一个组件,并进行某种程度的操作。该指南由 Roy Fielding 定义。对于被称为 REST(ful) API 的 API,它必须遵循某些准则,它们是:
1.客户端-服务器通信
-
无国籍
-
可缓存
4.统一的界面
5.分层系统
6.按需编码
您可以在此处阅读这些概念。
在 REST API 中,通信是在客户端和服务器之间进行的。该客户端通过端点(API 资源 URL)向服务器发送对特定资源数据的请求,服务器从数据库中获取数据,并将其作为响应发送给客户端。对于客户端和服务器之间通过端点进行的通信,有 HTTP 方法。这些方法指定应在请求中执行的操作类型。 HTTP 方法有很多,但最流行的是 CRUD(Create Read Update Delete) 操作;他们是:
POST u003d 用于创建具有唯一 ID 的新资源的方法 (Create)... (注意:无论您在哪里看到“资源”,它都是“数据”。不要混淆)
GET u003d 用于从端点获取一组对象的方法(读取)。
GET(id) u003d 用于根据 ID 获取特定资源的方法。
PUT u003d 用于更新或编辑现有资源。
DELETE u003d 该方法用于根据其 ID 删除特定资源。
当这些方法与请求一起发送时,服务器会以必要的响应状态代码进行响应。这些状态代码分为五组:
-
信息代码:告诉我们请求已收到。
-
成功代码:告诉我们任何我们想做的动作,都已成功执行。
-
重定向代码:我们的请求中有一个 URL 重定向。
-
客户端错误代码:它们根据客户端的错误抛出错误消息。
-
服务器错误代码:这些代码是由于服务器端的错误而出现的。它可能是代码中的错误。
那里有很多 HTTP 状态代码,比如......很多。但是如果你想检查每一个,你可以在这里找到它们。
现在我们对 REST API 有了一个基本概念......我们如何创建一个?
尽管主题是使用 Python 创建 API,但几乎可以使用我们能想到的任何编程语言创建 API; Java、JavaScript、Kotlin、PHP、Go、HTML......不,不是 HTML,但你明白了。如果它可以用于后端 Web 开发,那么它可以创建一个 API。
使用 Python 创建 API
我们已经知道 Python 是一种通用编程语言,这意味着它可以用于创建几乎任何类型的项目。可以使用 Python 从头开始创建 API。但是有一些框架让我们更容易。最流行的是 Django( Django Rest Framework )、Flask( Flask-RESTful ) 和 FastAPI。
我们将使用 Django Rest Framework 进行创建。我们的 API 范围是一个基于画廊 Web 的 API,我们可以通过它保存(发布/编辑)图片,随时查看,也可以删除。
要获得完整的代码,您可以从的 url克隆 repo。
Django Rest Framework 是一个包,可用于在 Python 中创建 RESTful API。可以使用 django 项目文件夹中的“pip install djangorestframework”或“pipenv install djangorestframework”(取决于您使用的包管理器)之类的简单命令安装该软件包。这应该在安装 Django Web 框架并创建实际的 Django 项目之后完成。
$ mkdir <DRFproject_folder>
$ cd <DRFproject_folder>
$ pipenv install Django
$ django-admin startproject DjngoImgAPI .
$ pipenv install djangorestframework
$ python manage.py startapp images
Django Rest Framework 是第 3 方应用程序,因此它应该包含在“INSTALLED_APPS”列表中作为“rest_framework”,以及新创建的 images 应用程序。
这使您可以调用包中的库。可以在此之后创建用于图像资源的 Images 应用程序,并将其添加到应用程序列表中,如上所示。
我们不应该忘记要添加到 Django 项目的urls.py文件中的图像应用程序 url,以及其余 _framework 的 url。
(是的,你要在图像应用程序中创建一个'**urls.py'**文件,它应该类似于下面的..)
# images/urls.py
from django.urls import path
app_name=”images”
urlpatterns = []
通过这样做,添加到 images/urls.py的任何 URL 路径都将在 Django 应用程序中注册。
我们可以继续为我们的图像资源创建 Image 模型。
(您可以决定添加自己的图像属性...)
然后我们迁移我们的模型。
$ python manage.py makemigrations
$ python manage.py migrate
如果您在项目开始时没有迁移,这应该会迁移您的 Image 模型以及其他迁移。
Image 模型的 image 属性的 upload_tou003d'media/' 指定当我们在本地服务器中发出请求时,我们的图像文件将存储在哪里。您可以通过执行以下操作进行设置:
$ mkdir media
然后在**settings.py**文件中:
接下来,创建 serializers。 序列化程序可以以合适的格式传输我们的图像数据,以便在任何客户端应用程序中使用。我们可以使用其余框架序列化程序库来序列化我们的图像数据。 serializers.py 文件应在 images 应用程序中创建。
现在,我们创建 API 的 VIEWS(* 以冥想的姿势呼气)。这些视图是我们用来为图像资源指定 HTTP 方法的视图。我将 API 视图视为您在处理普通 Django 应用程序时创建的普通视图。 Django Rest Framework 中有不同类型的 API 视图。有基于类的视图、基于函数的视图、通用视图和视图集。我不会决定要使用的最佳视图类型,这仅取决于您的品味以及您希望如何构建代码。所以在下面,我使用了通用视图。
有不同类型的通用视图:
• CreateAPIView (HTTP POST)
• DestroyAPIView (HTTP DELETE)
• ListAPIView (HTTP GET)
• ListCreateAPIView (HTTP GET | POST)
• RetrieveAPIView (HTTP GET{id})
• RetrieveDestroyAPIView (HTTP GET{id} | DELETE{id})
• RetrieveUpdateAPIView (HTTP GET{id} | PUT{id})
• RetrieveUpdateDestroyAPIView (HTTP GET{id} | PUT{id} | DELETE{id})
• UpdateAPIView (PATCH{id})
parser_classes 允许您接受各种媒体类型的请求。在这种情况下,我们使用支持文件上传的 MultiPartParser(因为我们将使用 POST 请求上传图像)。
(然后我们移到点的末尾,endpoints...双关语)这些基本上只是用于发出 HTTP 请求的 URL 路径,没什么大不了的。那么我们如何创建它们呢?...是的,在 images 应用程序的 urls.py 文件中。
就像在正常的 Django 项目中一样🙂
现在将端点粘贴到您最喜欢的 API 客户端 [_mine is Insomnia 🚫 😴] 中并尝试一下。
GET REQUEST
要为您的工作添加一些用于 swag 的查询参数,我们可以使用 django-filter 3rd 方应用程序来过滤我们 API 中的字段值:
$ pipenv install django-filter
**settings.py**文件中应该做如下
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'] # the filter back-end
}
然后在我们的 Image API View 中:
class ImageListCreate(ListCreateAPIView): # POST/GET methods
queryset = Image.objects.all()
serializer_class = ImageSerializer
parser_classes = [MultiPartParser] # to accept any media type during POST request
filterset_fields = ['title', 'caption'] ## the filter feature for filtering fields
然后通过在“?”后面添加查询参数来查询edpoint
0.0.0.0:8000/images/list-images?titleu003dBanana...(Note: 0.0.0.0 是我设置的 localhost)
API 在我们的日常生活中很有用,我们真的离不开它们,不是很快。我希望这篇文章很容易理解。如果你卡住了,或者有什么建议,或者你只是想和我联系,我只是一个 URLaway。
直到那时......快乐的编码。
更多推荐
所有评论(0)