所有文章 > API开发 > rest api 指南:使用 python 和 flask 构建
rest api 指南:使用 python 和 flask 构建

rest api 指南:使用 python 和 flask 构建

欢迎阅读关于使用 Flask 和 Flask-Restful 创建 REST API 的完整指南。在本文中,我们将从基础开始,逐步学习如何使用 Flask 构建功能强大的 REST API。Flask 是一个轻量级的 Python Web 框架,因其灵活性和简单性而备受开发者青睐。如果您对 Python 编程语言和 Flask 框架有基本的了解,那么这篇文章将帮助您快速上手。


什么是 REST API?

REST API(Representational State Transfer API)是一种基于 REST 架构风格的应用程序接口,允许不同的应用程序之间进行交互。它是当前微服务架构中最常用的通信方式之一。通过 REST API,您可以实现数据的获取、发送以及 CRUD(创建、读取、更新、删除)操作。

REST 架构的主要特点包括:

  • 资源通过 URL 表示。
  • 使用标准的 HTTP 方法(如 GET、POST、PUT、DELETE)操作资源。
  • 数据通常以 JSON 格式传输,便于解析和使用。

什么是 Flask 框架?

Flask 是一个用 Python 编写的微型 Web 框架,具有以下特点:

  • 轻量级:代码库小,易于学习和使用。
  • 灵活性:支持扩展,适合构建简单到复杂的 Web 应用程序。
  • 社区支持:拥有丰富的插件和活跃的开发者社区。

为什么选择 Flask?

  • 简单易用,适合初学者。
  • 提供了构建 REST API 的强大支持,例如 Flask-Restful 扩展。

创建您的第一个 REST API

让我们通过一个简单的示例来创建一个 "Hello World" API。以下是实现步骤:

安装 Flask 和 Flask-Restful

使用以下命令安装所需的库:

pip install flask flask-restful

编写代码

创建一个新的 Python 文件,并输入以下代码:

from flask import Flask
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

class HelloWorld(Resource):
 def get(self):
 return {"Hello": "World"}

api.add_resource(HelloWorld, '/')

if __name__ == '__main__':
 app.run(debug=True)

运行代码后,访问 http://127.0.0.1:5000/,您将看到以下 JSON 响应:

{"Hello": "World"}

什么是 Flask-Restful?

Flask-Restful 是 Flask 的一个扩展,用于简化 REST API 的开发。它通过定义资源类,将 HTTP 方法(如 GET、POST、PUT、DELETE)映射为类方法,极大地提高了代码的可读性和可维护性。

示例代码

以下是一个简单的 Flask-Restful 示例:

from flask import Flask
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

class HelloWorld(Resource):
 def get(self):
 return {"Hello": "World"}

api.add_resource(HelloWorld, '/')

if __name__ == '__main__':
 app.run(debug=True)

使用 Flask REST API 处理 HTTP 请求

REST API 的核心是处理 HTTP 请求。以下是一个示例,展示如何在 Flask 中实现 GET、POST 和 DELETE 方法:

示例代码

from flask import Flask, request
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

data = []

class People(Resource):
 def get(self):
 return data

 def post(self):
 name = request.json.get('name')
 data.append(name)
 return {"message": f"{name} added"}, 201

 def delete(self):
 name = request.json.get('name')
 if name in data:
 data.remove(name)
 return {"message": f"{name} deleted"}, 200
 return {"message": f"{name} not found"}, 404

api.add_resource(People, '/people')

if __name__ == '__main__':
 app.run(debug=True)

您可以使用 Postman 或其他 API 测试工具测试上述代码。


如何在 Flask REST API 中使用装饰器?

装饰器是一种函数,用于在不修改原函数的情况下为其添加功能。在 Flask API 中,装饰器可以用于记录请求的执行时间、监控 IP 地址等。

示例代码

以下是一个记录函数执行时间的装饰器示例:

import time
from functools import wraps

def timer(func):
 @wraps(func)
 def wrapper(*args, **kwargs):
 start_time = time.time()
 result = func(*args, **kwargs)
 end_time = time.time()
 print(f"Execution time: {end_time - start_time} seconds")
 return result
 return wrapper

如何使用基本身份验证保护 Flask API?

为了保护 API 的安全性,可以使用 Flask-HTTPAuth 实现基本身份验证。以下是一个示例:

安装 Flask-HTTPAuth

pip install flask-httpauth

示例代码

from flask import Flask
from flask_restful import Resource, Api
from flask_httpauth import HTTPBasicAuth

app = Flask(__name__)
api = Api(app)
auth = HTTPBasicAuth()

USER_DATA = {
 "admin": "SuperSecretPwd"
}

@auth.verify_password
def verify(username, password):
 if not (username and password):
 return False
 return USER_DATA.get(username) == password

class PrivateResource(Resource):
 @auth.login_required
 def get(self):
 return {"message": "Welcome, authorized user!"}

api.add_resource(PrivateResource, '/private')

if __name__ == '__main__':
 app.run(debug=True)

如何为 REST API 编写单元测试?

单元测试是确保代码质量的重要步骤。以下是一个简单的单元测试示例:

示例代码

import unittest
from app import app

class FlaskTest(unittest.TestCase):
 def test_index(self):
 tester = app.test_client(self)
 response = tester.get('/')
 self.assertEqual(response.status_code, 200)

if __name__ == '__main__':
 unittest.main()

结论

通过本文,您学习了如何使用 Flask 和 Flask-Restful 创建 REST API,包括基本的 API 开发、HTTP 请求处理、装饰器的使用、安全性增强以及单元测试。REST API 是现代应用程序开发的重要组成部分,掌握这些技能将为您的开发工作带来极大的便利。


原文链接: https://www.analyticsvidhya.com/blog/2022/01/rest-api-with-python-and-flask/
#你可能也喜欢这些API文章!

我们有何不同?

API服务商零注册

多API并行试用

数据驱动选型,提升决策效率

查看全部API→
🔥

热门场景实测,选对API

#AI文本生成大模型API

对比大模型API的内容创意新颖性、情感共鸣力、商业转化潜力

25个渠道
一键对比试用API 限时免费

#AI深度推理大模型API

对比大模型API的逻辑推理准确性、分析深度、可视化建议合理性

10个渠道
一键对比试用API 限时免费