我们每次都听到它......“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.客户端-服务器通信

  1. 无国籍

  2. 可缓存

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 删除特定资源。

当这些方法与请求一起发送时,服务器会以必要的响应状态代码进行响应。这些状态代码分为五组:

  1. 信息代码:告诉我们请求已收到。

  2. 成功代码:告诉我们任何我们想做的动作,都已成功执行。

  3. 重定向代码:我们的请求中有一个 URL 重定向。

  4. 客户端错误代码:它们根据客户端的错误抛出错误消息。

  5. 服务器错误代码:这些代码是由于服务器端的错误而出现的。它可能是代码中的错误。

那里有很多 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 应用程序。

2022-02-23 02-47-11.png 截图

这使您可以调用包中的库。可以在此之后创建用于图像资源的 Images 应用程序,并将其添加到应用程序列表中,如上所示。

我们不应该忘记要添加到 Django 项目的urls.py文件中的图像应用程序 url,以及其余 _framework 的 url。

2022-02-23 03-01-48.png 截图

(是的,你要在图像应用程序中创建一个'**urls.py'**文件,它应该类似于下面的..)

# images/urls.py
from django.urls import path  

app_name=”images”

urlpatterns = []

通过这样做,添加到 images/urls.py的任何 URL 路径都将在 Django 应用程序中注册。

我们可以继续为我们的图像资源创建 Image 模型。

2022-02-23 03-08-26.png 截图

(您可以决定添加自己的图像属性...)

然后我们迁移我们的模型。

$ python manage.py makemigrations

$ python manage.py migrate

如果您在项目开始时没有迁移,这应该会迁移您的 Image 模型以及其他迁移。

Image 模型的 image 属性的 upload_tou003d'media/' 指定当我们在本地服务器中发出请求时,我们的图像文件将存储在哪里。您可以通过执行以下操作进行设置:

$ mkdir media

然后在**settings.py**文件中:

2022-02-23 03-17-09.png 截图

接下来,创建 serializers。 序列化程序可以以合适的格式传输我们的图像数据,以便在任何客户端应用程序中使用。我们可以使用其余框架序列化程序库来序列化我们的图像数据。 serializers.py 文件应在 images 应用程序中创建。

2022-02-23 03-21-05.png 截图

现在,我们创建 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})

截图来自 2022-02-23 03-28-22.png

parser_classes 允许您接受各种媒体类型的请求。在这种情况下,我们使用支持文件上传的 MultiPartParser(因为我们将使用 POST 请求上传图像)。

(然后我们移到点的末尾,endpoints...双关语)这些基本上只是用于发出 HTTP 请求的 URL 路径,没什么大不了的。那么我们如何创建它们呢?...是的,在 images 应用程序的 urls.py 文件中。

截图来自2022-02-23 03-33-24.png

就像在正常的 Django 项目中一样🙂

现在将端点粘贴到您最喜欢的 API 客户端 [_mine is Insomnia 🚫 😴] 中并尝试一下。

截图来自 2022-02-22 19-38-52.pngGET 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) 截图来自 2022-02-22 21-52-00.png

API 在我们的日常生活中很有用,我们真的离不开它们,不是很快。我希望这篇文章很容易理解。如果你卡住了,或者有什么建议,或者你只是想和我联系,我只是一个 URLaway。

直到那时......快乐的编码。

Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐