构建RESTful APIs:使用Python和Flask

在现今的软件开发里头, 打造一个优良的API是极其关键的, 它能让各异的系统以及服务之间, 借助一种标准化的途径展开相互通信。API是一种被广泛运用的API设计风格, 它运用HTTP协议的标准办法, 像GET、POST、PUT等方式, 去处理网络之内的资源。在诸多可选用的框架当中, Flask凭借其轻量级以及易用性, 而成了构建APIs时候的一个热门选择。本文会阐述怎样运用Flask构建一个简易的API。

Flask简介

轻量级的Web应用框架Flask, 是通过编写创作出的, 具有易于去做扩展以及根据自身情况进行自定义的特性, 对于那些小型项目以及微服务而言是十分适配的, 它给出了像路由、请求处理还有模板渲染等这样的基础功能, 并且同时还支持以插件的方式去做扩展, 借此让开发者能够依照自身的需求增添更多功能。

环境准备

在着手开展之前, 务必要保证已然安装好了与Flask相依的部分。能够凭借底下这些命令去实施对Flask的安装:

复制代码
pip install Flask

创建一个简单的Flask应用

首个, 我们得去构建一个基础的Flask应用。下面是一个简易的Flask应用实例:

复制代码
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/')
def hello_world():
    return 'Hello, World!'
if __name__ == '__main__':
    app.run(debug=True)

在这个例子当中, 我们把Flask类给导入了, 接着创建出一个Flask应用实例。@app.route('/')装饰器对一个路由做出了定义, 此定义是把根URL ("/")映射连接到函数。函数的主要作用是把数据转变为JSON格式响应。

定义资源和路由

于API里, 资源乃核心概念, 资源能够是一名用户, 亦可是一篇文章, 或者为任何需被表示的对象, 每一个资源皆对应一个或者多个URL, 且借助HTTP方法来进行操作, 比如说, GET方法用以获取资源, POST用于创建全新资源, PUT用于更新资源, 用于删除资源。

让我们为一个简单的"图书"资源创建一些路由:

复制代码
from flask import Flask, jsonify, request
app = Flask(__name__)
books = [
    {
   'id': 1, 'title': 'Book 1', 'author': 'Author 1'},
    {
   'id': 2, 'title': 'Book 2', 'author': 'Author 2'}
]
@app.route('/books', methods=['GET'])
def get_books():
    return jsonify({
   'books': books})
@app.route('/books', methods=['POST'])
def create_book():
    new_book = {
   
        'id': books[-1]['id'] + 1,
        'title': request.json.get('title'),
        'author': request.json.get('author')
    }
    books.append(new_book)
    return jsonify({
   'book': new_book}), 201
@app.route('/books/', methods=['PUT'])
def update_book(book_id):
    for book in books:
        if book['id'] == book_id:
            book['title'] = request.json.get('title', book['title'])
            book['author'] = request.json.get('author', book['author'])
            return jsonify({
   'book': book})
    return jsonify({
   'error': 'Book not found'}), 404
@app.route('/books/', methods=['DELETE'])
def delete_book(book_id):
    for book in books:
        if book['id'] == book_id:
            books.remove(book)
            return jsonify({
   'result': True})
    return jsonify({
   'error': 'Book not found'}), 404
if __name__ == '__main__':
    app.run(debug=True)

在这个例子当中, 我们定义了一个列表, 它被称作books, 其用途是用来存储书籍资源。我们针对这个资源定义了四条路由, 这四条路由分别对应着GET, POST, PUT以及方法。这些路由能够让我们去查询全部书籍, 能够创建全新书籍, 能够更新已有的书籍, 并且能够删除书籍。

请求和响应

于Flask里, 我们能够借由对象去访问客户端所发送的数据, 比如说, .json存有发送过来的JSON数据, 我们也能够运用函数把数据转变为JSON格式的响应。

错误处理

API设计若良好, 那便应当涵盖错误处理。Flask之中, 我们能够借由返回一个内含错误信息的字典以及对应的HTTP状态码去处理错误。于上面所举例子里, 要是尝试更新或者删除一本并不存在的书籍, 我们将会返回一个带有错误信息的404状态码。

运行和测试API

若要运行Flask应用, 仅需执行脚本就行。一旦应用启动起来, 我们能够运用浏览器或者诸如curl这般的命令行工具去测试我们的API。比如说, 我们可用以下命令来测试获取全部书籍的端点:

复制代码
curl http://localhost:5000/books

总结

经由本文所说内容, 我们能够瞧见运用跟Flask搭建APIs是比较简便的, 一个值得去考虑的选择, Flask给出了所需的工具以及灵活性用以创建强大的API, 不管是为前端应用供给服务, 还是达成微服务架构, 随着实践的深入,我们能够更进一步去探究Flask如蓝图()、错误处理和认证这般的高级功能, 从而构建更为完备且安全的API。

相关推荐
半亩码田1 小时前
C#转Python第4.5篇:单元测试:pytest vs xUnit/NUnit
python·单元测试·c#
2601_962300811 小时前
Python + Requests + Pytest + Excel + Allure:接口自动化测试项目实战
python·excel·pytest·allure·requests
Zane19941 小时前
两个线程算两遍循环,为什么只快了一点点不是两倍?GIL连环追问
后端·python
重生之小比特1 小时前
【Java SE】程序逻辑控制
java·开发语言·python
小灰灰搞电子1 小时前
Python 函数参数分隔符 *:Keyword-Only Arguments 原理与实践
开发语言·python
2601_962297251 小时前
Authlib 0.13通用Python认证授权库wheel安装包(支持Python 2/3)
python·jwt·oauth2.0·authlib·openidconnect
SamChan901 小时前
大文件多语言PDF翻译性能实测:300页文档的耗时、内存占用与失败率分析
python·ai·pdf·机器翻译
GIS数据转换器1 小时前
遥感GIS一体化技术应用平台
大数据·人工智能·python·安全·数据挖掘
2601_966949651 小时前
批量 K 线不只是提速:因子研究中的数据质量、复权与回测偏差
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash