当前位置: 首页 > news >正文

《每天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

pip install flask-restful

示例代码:创建API资源

from flask import Flask
from flask_restful import Api, Resource, reqparseapp = 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

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序列化数据

pip install marshmallow
from marshmallow import Schema, fieldsclass 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进行输入验证

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设计中,合理的错误处理可以提供清晰的错误信息,帮助客户端开发者理解问题所在。

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

from flask_restful import Resource, Api, reqparse, abortclass 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资源、序列化和反序列化数据、进行输入验证和错误处理。

http://www.lryc.cn/news/392254.html

相关文章:

  • CCM的作用及原理
  • 10.09面试题目记录
  • 14-29 剑和诗人3 – 利用知识图谱增强 LLM 推理能力
  • 【代码大全2 选读】看看骨灰级高手消灭 if-else 逻辑的瑞士军刀长啥样
  • 深度学习 --- stanford cs231学习笔记八(训练神经网络之dropout)
  • 【C++】 解决 C++ 语言报错:Undefined Reference
  • 【博士每天一篇文献-算法】Adult neurogenesis acts as a neural regularizer
  • 在Spring Boot项目中引入本地JAR包的步骤和配置
  • Android Studio中使用命令行gradle查看签名信息
  • 昇思25天学习打卡营第5天 | 神经网络构建
  • Web缓存—Nginx和CDN应用
  • Linux 端口
  • 菜鸡的原地踏步史02(◐‿◑)
  • 实现Java应用的数据加密与解密技术
  • 赛博解压板
  • 微信小程序常用的事件
  • js时间转成xx前
  • iOS 锁总结(cc)
  • 【CSAPP】-binarybomb实验
  • SpringBoot实战:轻松实现XSS攻击防御(注解和过滤器)
  • 如何改善提示词,让 GPT-4 更高效准确地把视频内容整体转换成文章?
  • TensorBoard进阶
  • 使用AES加密数据传输的iOS客户端实现方案
  • vue3【实战】语义化首页布局
  • FANG:利用社交网络图进行虚假新闻检测
  • Vue2 基础八电商后台管理项目——中
  • Typescript window.localStorage 存储 Obj Value区别
  • Linux要解压 .rar 文件,你应该使用 unrar 命令
  • 【qt】如何获取网卡的信息?
  • 使用Netty框架实现WebSocket服务端与客户端通信(附ssl)