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

聊城集团网站建设做旅游去哪个网站找图

聊城集团网站建设,做旅游去哪个网站找图,建设部网站查资质6,长沙网页《Python实战进阶》专栏包括68集,每一集聚焦一个中高级技术知识点,涵盖Python在Web开发、数据处理、自动化、机器学习、并发编程等领域的应用,系统梳理Python开发者的知识集。本集的主题为: No4 : GraphQL vs RESTful API 对比与实…
《Python实战进阶》专栏包括68集,每一集聚焦一个中高级技术知识点,涵盖Python在Web开发、数据处理、自动化、机器学习、并发编程等领域的应用,系统梳理Python开发者的知识集。本集的主题为: No4 : GraphQL vs RESTful API 对比与实现 ,第六集的主题为No6 : OAuth2.0 认证与授权的实现 。

第五集:GraphQL vs RESTful API 对比与实现


目录
  1. 引言
  2. RESTful API 简介与优缺点
  3. GraphQL 简介与优缺点
  4. GraphQL 与 RESTful API 的对比
  5. 实战:构建一个简单的 RESTful API 和 GraphQL API
    • RESTful API 实现
    • GraphQL API 实现
  6. 总结

1. 引言

在现代 Web 开发中,API 是前后端通信的核心。RESTful API 和 GraphQL 是两种主流的 API 设计方式,它们各有优劣,适用于不同的场景。本节将深入探讨两者的区别,并通过实战代码展示如何实现这两种 API。


2. RESTful API 简介与优缺点

RESTful API 是一种基于 HTTP 协议的架构风格,它通过 URL 定义资源,并使用 HTTP 方法(如 GET、POST、PUT、DELETE)对资源进行操作。

在这里插入图片描述

优点
  • 简单直观:URL 明确表示资源,HTTP 方法清晰定义操作。
  • 广泛支持:几乎所有编程语言和框架都支持 RESTful 风格。
  • 缓存友好:HTTP 缓存机制可以直接应用于 RESTful API。
缺点
  • 过度获取或不足获取数据:客户端无法灵活控制返回的数据结构,可能导致冗余或缺失。
  • 版本管理复杂:随着需求变化,可能需要维护多个版本的 API。

3. GraphQL 简介与优缺点

GraphQL 是 Facebook 开发的一种查询语言,允许客户端精确指定所需的数据结构,从而避免了 RESTful API 的过度获取问题。
在这里插入图片描述

优点
  • 灵活性:客户端可以自定义查询,只获取需要的数据。
  • 单一入口:所有请求通过一个端点完成,简化了 API 设计。
  • 强类型系统:GraphQL 提供了类型定义,便于开发和调试。
缺点
  • 学习曲线较高:相比 RESTful API,GraphQL 的概念和实现更复杂。
  • 性能问题:复杂的嵌套查询可能导致性能瓶颈。
  • 工具生态相对较少:虽然 GraphQL 工具链日益完善,但仍不及 RESTful API 成熟。

4. GraphQL 与 RESTful API 的对比

特性RESTful APIGraphQL
数据获取固定结构,可能冗余或不足灵活查询,按需获取
请求方式多个端点,每个端点对应一个资源单一端点,统一处理所有请求
缓存支持原生支持 HTTP 缓存需要额外实现缓存机制
学习难度简单直观概念较复杂,需要学习查询语言
性能优化较容易优化需要防止 N+1 查询等问题

5. 实战:构建一个简单的 RESTful API 和 GraphQL API

我们将以一个简单的任务管理系统为例,展示如何实现 RESTful API 和 GraphQL API。

环境准备
  • Python 3.8+
  • Flask(用于 RESTful API)
  • Graphene(用于 GraphQL API)

安装依赖:

pip install flask graphene flask-graphql requests
数据模型

假设我们有一个任务列表,每项任务包含以下字段:

  • id: 任务 ID
  • title: 任务标题
  • description: 任务描述
  • done: 是否完成
RESTful API 实现

创建文件 rest_api.py

from flask import Flask, jsonify, requestapp = Flask(__name__)# 模拟的任务数据
tasks = [{"id": 1, "title": "Learn Python", "description": "Study Python basics", "done": False},{"id": 2, "title": "Write Code", "description": "Practice coding daily", "done": True},
]@app.route('/tasks', methods=['GET'])
def get_tasks():return jsonify(tasks)@app.route('/tasks/<int:task_id>', methods=['GET'])
def get_task(task_id):task = next((task for task in tasks if task["id"] == task_id), None)if task:return jsonify(task)return jsonify({"error": "Task not found"}), 404@app.route('/tasks', methods=['POST'])
def create_task():new_task = request.jsonnew_task["id"] = len(tasks) + 1tasks.append(new_task)return jsonify(new_task), 201if __name__ == '__main__':app.run(debug=True)

运行 RESTful API:

python rest_api.py

测试1:

curl http://127.0.0.1:5000/tasks  
#或者在浏览器输入:
http://127.0.0.1:5000/tasks  

程序输出:

[{"description": "Study Python basics","done": false,"id": 1,"title": "Learn Python"},{"description": "Practice coding daily","done": true,"id": 2,"title": "Write Code"}
]

测试2:

curl http://127.0.0.1:5000/tasks/1  
#或者在浏览器输入:
http://127.0.0.1:5000/tasks/1 

程序输出:

{"description": "Study Python basics","done": false,"id": 1,"title": "Learn Python"
}

测试3:

curl -X POST http://127.0.0.1:5000/tasks -H "Content-Type: application/json" -d "{\"title\":\"New Task\", \"description\": \"This is a new task\", \"done\": false}"

程序输出:

{"description": "This is a new task","done": false,"id": 4,"title": "New Task"
}
GraphQL API 实现

创建文件 graphql_api.py

from flask import Flask
from flask_graphql import GraphQLView
from graphene import ObjectType, String, Boolean, List, Schema, Field, Int, Mutationapp = Flask(__name__)# 定义任务类型
class Task(ObjectType):id = Int()title = String()description = String()done = Boolean()# 模拟的任务数据
tasks = [Task(id=1, title="Learn Python", description="Study Python basics", done=False),Task(id=2, title="Write Code", description="Practice coding daily", done=True),
]# 查询根类型
class Query(ObjectType):tasks = List(Task)task = Field(Task, id=Int())def resolve_tasks(self, info):return tasksdef resolve_task(self, info, id):return next((task for task in tasks if task.id == id), None)# 变更根类型
class CreateTask(Mutation):class Arguments:title = String()description = String()done = Boolean()task = Field(Task)def mutate(self, info, title, description, done):new_task = Task(id=len(tasks) + 1, title=title, description=description, done=done)tasks.append(new_task)return CreateTask(task=new_task)class Mutation(ObjectType):create_task = CreateTask.Field()schema = Schema(query=Query, mutation=Mutation)# 添加 GraphQL 视图
app.add_url_rule('/graphql',view_func=GraphQLView.as_view('graphql', schema=schema, graphiql=True)
)if __name__ == '__main__':app.run(debug=True)

运行 GraphQL API:

python graphql_api.py

访问 http://127.0.0.1:5000/graphql,使用 GraphiQL 测试查询和变更。

示例查询:

{tasks {idtitledone}
}

示例变更:

mutation {createTask(title: "New Task", description: "Description", done: false) {task {idtitle}}
}

6. 总结

通过本节的学习,我们了解了 RESTful API 和 GraphQL 的核心概念及优缺点,并通过实战代码实现了两种 API。选择哪种技术取决于具体需求:如果需要简单易用的 API,RESTful 是不错的选择;如果需要灵活的数据查询能力,GraphQL 更加适合。

在下一集《OAuth2.0 认证与授权的实现》中,我们将探讨如何为 API 添加安全保护机制,敬请期待!


图示
  • 图1:RESTful API 请求流程图
  • 图2:GraphQL 查询流程图

希望本节内容对你有所帮助!


文章转载自:

http://bBBTnWVL.tbhtr.cn
http://hC2m09XX.tbhtr.cn
http://cwZpHcXB.tbhtr.cn
http://QGJx1Mhc.tbhtr.cn
http://nhXStT0E.tbhtr.cn
http://IeKLNFOQ.tbhtr.cn
http://145pUZo6.tbhtr.cn
http://cro9uq6h.tbhtr.cn
http://TsP92fms.tbhtr.cn
http://ZMAH6htK.tbhtr.cn
http://zGrRLh77.tbhtr.cn
http://1QWFWIGw.tbhtr.cn
http://jBR0g9l2.tbhtr.cn
http://wQVEgihr.tbhtr.cn
http://iL7tgvj2.tbhtr.cn
http://q2q2ERcA.tbhtr.cn
http://OYcMOomB.tbhtr.cn
http://eeZnw6jQ.tbhtr.cn
http://HGEpnNiB.tbhtr.cn
http://77HMFs8S.tbhtr.cn
http://SP4lK7QR.tbhtr.cn
http://p897z8DY.tbhtr.cn
http://iZTmfqG9.tbhtr.cn
http://xJlapJ5T.tbhtr.cn
http://vwiVovy8.tbhtr.cn
http://O9okpL5Z.tbhtr.cn
http://Sl7jSKNB.tbhtr.cn
http://cMJHK68j.tbhtr.cn
http://GXrFYd8D.tbhtr.cn
http://Ykg9ivsV.tbhtr.cn
http://www.dtcms.com/wzjs/712076.html

相关文章:

  • 百度推广网站怎么做网络营销的特点包括哪些
  • 江安网站建设定州国际陆港项目
  • 什么是 网站收录html5网站开发环境
  • 制作网页网站用的是什么网站设计开发中的具体步骤
  • 沈阳网站建设 成创网站从域名
  • 单页网站 seowordpress 后台代码
  • 天津品牌网站建设公司哪家好wordpress打不开后台
  • 网文网站排名wordpress移动端视频
  • 网站空间租用做网站赚钱什么类型
  • 专业做蛋糕的网站nginx建设网站教程
  • 子洲网站建设制作百度竞价电话
  • 电子商务网站管理分销系统开发公司
  • iis7 网站无法显示该页面微信安装到手机
  • 网站怎么做uc整合wordpress评分点评
  • 本地建设多个网站链接建设银行关方网站
  • 口碑好的定制网站建设公司泰安集团网站建设方案
  • 餐饮行业网站建设风格网站建设公司怎样
  • 营销网站的建设流程网站建设知识文章
  • 竞猜网站模板ps制作网站模板
  • 营销策划公司有哪些职位做网站建设优化的电话话术
  • 免费建立个人app网站网站模板免费下载网站
  • 高端酒店网站模板免费下载成都网站建设 龙兵
  • wordpress建站费用学院网站整改及建设情况报告
  • 个人博客网站开发历程免费人脉推广官方软件
  • 找人给公司做网站去哪找深圳工程交易中心官网
  • 如何做DJ网站社群营销怎么做
  • 移动端网站搭建网站托管目的是什么
  • 专业网站建设经费申请怎么开外贸网店
  • 做网站的收费标准天猫开店流程及费用2022
  • 北京网站制作收费标准网站模板对seo的影响吗