《每天5分钟用Flask搭建一个管理系统》第9章:API设计

第9章:API设计

9.1 RESTful API的概念

RESTful API是一种基于HTTP协议的网络服务接口设计方法,它使用标准的HTTP方法,如GET、POST、PUT、DELETE等,来执行资源的操作。

9.2 Flask-RESTful扩展的使用

Flask-RESTful是一个Flask扩展,简化了创建RESTful API的过程。

示例代码:安装Flask-RESTful

bash 复制代码
pip install flask-restful

示例代码:创建API资源

python 复制代码
from flask import Flask
from flask_restful import Api, Resource, reqparse

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

class HelloWorld(Resource):
    def get(self):
        return {'hello': 'world'}

api.add_resource(HelloWorld, '/')
9.3 API路由和视图的创建

在Flask-RESTful中,资源(Resource)是API的基本单元,每个资源都映射到一个URL路由。

示例代码:添加资源到API

python 复制代码
class UserResource(Resource):
    def get(self, user_id):
        # 假设有一个函数get_user可以获取用户数据
        return get_user(user_id)

api.add_resource(UserResource, '/users/<int:user_id>')
9.4 数据序列化和反序列化

序列化是将数据结构或对象状态转换为可存储或可传输的格式的过程。反序列化是序列化相反的过程。

示例代码:使用Marshmallow序列化数据

bash 复制代码
pip install marshmallow
python 复制代码
from marshmallow import Schema, fields

class UserSchema(Schema):
    id = fields.Int()
    username = fields.Str()
    email = fields.Email()

user_schema = UserSchema()

# 序列化
data, errors = user_schema.dump(user)
# 反序列化
data, errors = user_schema.load(request.json)
9.5 API输入验证

在API开发中,验证输入数据的正确性是非常重要的。

示例代码:使用Marshmallow进行输入验证

python 复制代码
class UserSchema(Schema):
    username = fields.Str(required=True)
    email = fields.Email(required=True)

user_schema = UserSchema()

# 验证输入
result = user_schema.load(request.json)
if result.errors:
    # 处理错误
9.6 API的错误处理

在API设计中,合理的错误处理可以提供清晰的错误信息,帮助客户端开发者理解问题所在。

示例代码:自定义错误处理

python 复制代码
from flask_restful import Resource, Api, reqparse, abort

class UserResource(Resource):
    def get(self, user_id):
        if user_id == 'invalid':
            abort(404, message="User not found")
        return {'user_id': user_id}

api.add_resource(UserResource, '/users/<string:user_id>')
9.7 总结

本章介绍了RESTful API的概念,以及如何使用Flask-RESTful和Marshmallow扩展来创建API资源、序列化和反序列化数据、进行输入验证和错误处理。

相关推荐
青 春 记 忆4 小时前
零基础入门python30:Flask个人账本从空目录运行与阶段验收
python·flask·后端开发
陈随易4 小时前
pm2 替代品,nodejs&bun 线上部署必备工具
前端·后端·程序员
l1258654 小时前
# LangGraph Memory机制深度解析:短期记忆与长期记忆的工程实践
前端·人工智能·python·langchain·bootstrap
丘山一郎5 小时前
Spring 中的IOC控制反转 和DI依赖注入
java·后端·spring
码视野5 小时前
基于 Spring Boot + Vue3 的【大学英语四六级 (CET-4/6) 作文智能评分与句式润色系统】设计与实现(含PRD/三端高保真源码/大屏)
java·前端·人工智能·spring boot·后端·vue3
MetaLite5 小时前
Spring-AOP自调用为什么失效-AopContext真能解决吗
java·后端·spring
MC皮蛋侠客5 小时前
Tauri 2.x 系列(五):调用系统 API——官方插件、Rust crate 与原生能力
开发语言·后端·rust
金銀銅鐵5 小时前
斐波那契数列的个位数出现的周期是多少?
python·数学
whcyhhh7 小时前
头歌实践教学平台:数据科学与大数据技术导论(十二)
大数据·开发语言·python·数据清洗
qq_316411037 小时前
专业的腹腔镜医疗器械物联网APP开发服务商
python