版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
HTTP客户端和API设计计算机网络·第9章知识讲解CONTENTS本章导学01HTTP概述HTTP发展历史、基本结构、请求与响应、状态码02RESTfulAPI设计架构风格、最佳实践、版本管理与文档03PythonHTTP客户端requests库、高级功能、异步aiohttp04认证授权与安全认证机制、权限控制、API安全与限流01HTTP概述从HTTP发展历史到基本结构,理解Web通信的基石HTTP协议的演进历程1991HTTP/0.9最初版本,仅支持GET方法,无头部信息,服务器发送完数据即关闭连接1996HTTP/1.0引入版本号、头部(Headers)、状态码,支持POST/HEAD,每请求需新建TCP连接1997HTTP/1.1持久连接减少开销,管道化处理请求,强化缓存,引入Host头部2015HTTP/2二进制帧层,多路复用解决队头阻塞,服务器推送,强制TLS加密未来HTTP/3基于QUIC协议(UDP),低延迟连接,解决TCP固有问题核心趋势:每个版本都在解决前一版本的限制,同时增加新功能以支持更复杂的网络应用。HTTP已成为全球最重要的协议之一。04HTTP请求与响应结构HTTP请求结构请求行HTTP方法+请求URI+HTTP版本请求头部Host、User-Agent、Accept等键值对空行头部与主体的分隔请求主体可选,用于POST等发送数据HTTP响应结构状态行HTTP版本+状态码+状态消息响应头部Content-Type、Content-Length等空行头部与主体的分隔响应主体服务器返回的数据(HTML/JSON等)常用HTTP方法GET获取资源POST提交数据PUT更新资源DELETE删除资源PATCH部分修改HEAD获取头部OPTIONS查询支持的方法HTTP状态码分类1xx信息性状态码2xx成功状态码3xx重定向状态码4xx客户端错误5xx服务器错误05HTTP协议交互示意图06HTTP协议交互示意图07pipinstallrequests#发送GET请求,包含查询参数:importrequestsurl='/api/data'params={'key1':'value1','key2':'value2'}response=requests.get(url,params=params)print(response.text)#处理响应数据#发送POST请求,包含头部和查询参数:importrequestsurl='/api/login'headers={'User-Agent':'my-app/0.0.1'}data={'user':'user1','password':'12345'}response=requests.post(url,headers=headers,data=data)print(response.text)#处理响应数据02RESTfulAPI设计原则掌握REST架构风格与API设计的最佳实践RESTful架构风格的核心特征六大核心原则客户端/服务器分离关注点分离无状态每个请求包含全部信息可缓存响应可定义为可缓存统一接口标准HTTP方法操作分层系统组件可独立增减按需代码服务器可扩展客户端架构风格特点资源识别每个资源有唯一标识符(URI),客户端通过URI访问资源资源表现资源可有多种表现形式(JSON/XML/HTML),内容协商确定HATEOAS超媒体作为应用状态引擎,客户端通过链接动态导航HTTP方法与CRUD对应CRUD操作HTTP方法描述创建POST创建新资源读取GET读取资源更新PUT全量更新部分更新PATCH部分修改删除DELETE删除资源09RESTfulAPI框架10API设计最佳实践01使用名词表示资源如/users、/products02HTTP方法表示操作GET查、POST创、PUT更、DELETE删03保持URL简洁避免过度嵌套,自描述性04路径变量指定资源如/users/{id}而非查询参数05查询参数过滤?category=books&sort=price06状态码表示响应200成功、201创建、404不存在07版本控制URI路径或请求头管理版本08JSON作为默认格式轻量级、易读、易解析09安全性保障HTTPS加密+OAuth认证10文档和示例提供Swagger/OpenAPI交互式文档,帮助开发者快速集成11支持HATEOAS超媒体链接提升API可浏览性和自描述性设计原则:良好的API设计应确保长期成功和开发者满意度,一致性、可维护性和用户友好性缺一不可。11Token进行API身份验证12使用PyJWT生成JWT的示例代码13#确保安装了PyJWTpipinstallPyJWTimportjwtimportdatetime#密钥secret_key='your-secret-key'#用户信息user_info={'username':'johndoe','email':'john.doe@example.com'#令牌有效期设置为1小时expiration_time=datetime.datetime.utcnow()+datetime.timedelta(hours=1)#生成JWTtoken=jwt.encode({'user_info':user_info,'exp':expiration_time},secret_key,algorithm='HS256')print(token)#验证JWTpipinstallPyJWT#从请求中获取Tokenrequest_token='...'#前端传来的JWT#解码Tokentry:payload=jwt.decode(request_token,secret_key,lgorithms=['HS256'])#验证Token中的信息,如用户名、过期时间等username=payload.get('user_info',{}).get('username')#如果验证通过,可以继续处理请求exceptjwt.ExpiredSignatureError:#Token已过期passexceptjwt.InvalidTokenError:#Token无效passAPI版本管理与文档规范版本控制策略对比API文档最佳实践清晰结构:快速入门、认证、端点、错误码详细端点描述:URL、方法、参数、响应示例交互式文档:Swagger/OpenAPI直接测试更新维护:文档与API行为保持一致版本管理关键策略URI路径版本控制直观易理解,请求头版本控制保持URL一致性。实际应用中通常结合两者以达到最佳版本管理效果。版本过渡应提供兼容期,并明确废弃策略。14特性URI版本控制请求头版本控制实现方式在URI中添加版本标识通过HTTP请求头管理版本版本控制粒度可以控制到每个资源或每个API仅能控制到每个请求兼容性旧版本API可以保持兼容新旧版本API可能需要并存,不再兼容路径变更不需要,每个版本的URI不同通常不需要,可以通过请求头进行区分路由处理需要服务器端路由区分不同版本URI通常不需要,可以在服务器端统一处理参数传递版本信息可以作为参数或者路径一部分需要在每个请求的头部显式传递03Python中的HTTP客户端库从同步到异步,掌握PythonHTTP编程的核心工具requests库的基础用法基本请求操作#安装pipinstallrequests#GET请求response=requests.get(url)#POST请求response=requests.post(url,data=data)#响应处理print(response.status_code)print(response.json())核心功能要点简洁API:一行代码发送HTTP请求会话保持:Session对象跨请求保持CookiesSSL验证:自动HTTPS证书验证异常处理:HTTPError等异常捕获设计理念:requests库遵循"HTTPforHumans"理念,使HTTP请求尽可能简单。它提供了直观的API来发送各种HTTP请求,并能轻松处理请求和响应数据。16高级HTTP客户端功能处理Cookies自动处理服务器Cookies并在后续请求中发送超时设置为请求设置超时时间,防止无限期等待响应SSL证书验证默认验证HTTPS证书,支持自定义或禁用HTTP代理支持通过代理发送请求,适用于特定网络路径访问流式请求逐块处理大文件或实时数据流式传输会话对象持久化Session跨请求保持参数,自动处理持久连接自定义请求头自定义HTTP请求头发送额外信息给服务器文件上传支持简单文件上传和多部分编码(multipart)上传这些高级功能使requests库非常强大和灵活,能够处理各种复杂的HTTP请求场景,构建出健壮且高效的HTTP客户端应用程序。17异步HTTP客户端—aiohttp异步GET请求示例importaiohttp,asyncioasyncdef
fetch(session,url):asyncwithsession.get(url)asresp:returnawaitresp.text()asyncwithaiohttp.ClientSession()ass:html=awaitfetch(s,'https://api...')aiohttp核心优势高并发性能:基于asyncio,非阻塞I/O客户端+服务端:完整的异步Web框架适用场景:爬虫、微服务间通信同步vs异步对比requests(同步)•简单易用,适合大多数场景•阻塞式I/O,请求需等待响应•并发需借助多线程/多进程aiohttp(异步)•高性能,适合高并发场景•非阻塞I/O,等待时可执行其他任务•单线程即可处理大量并发请求1804认证、授权和安全性构建安全可靠的API系统认证机制与授权控制五种认证方式认证方式特点说明Basic认证Base64编码用户名密码,需配合HTTPS使用Digest认证MD5哈希加密密码,防止明文传输OAuth2.0开放标准,使用访问令牌授权第三方应用API密钥简单认证方式,客户端请求中包含密钥JWTJSONWebToken,可加密签名用于身份验证七种授权控制机制RBAC角色基础的访问控制ABAC属性基础的访问控制OAuth2.0Scope作用域权限范围控制API密钥策略结合访问策略限制API访问JWT声明Token中包含角色和权限信息最小权限原则:用户或系统应只有完成任务所必需的最小权限集,这有助于减少安全风险。20API安全性与监控限流API安全十二要素HTTPS加密传输输入验证防注入认证授权机制请求频率限制敏感数据管理错误处理防泄露CORS跨域配置API网关保护API监控和限流流程客户端请求API网关限流系统监控
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 区块链支付技术与人工智能的结合-洞察与解读
- 沈阳城市学院《传统民居与乡土建筑》2026-2027学年第一学期期末试卷含解析
- 泉州工程职业技术学院《结构基础》2026-2027学年第一学期期末试卷含解析
- 浙江电力职业技术学院《艺术素养基础(音乐二)》2026-2027学年第一学期期末试卷含解析
- 2026年小学美术教学小妙招
- 2026年职业规划大赛生涯发展报告
- 2026年新生入学仪式活动方案
- 2026年四川省绵竹市高考物理二模试卷及答案详解
- 2025年黑龙江省抚远市高考物理一轮复习试卷【培优B卷】附答案详解
- 2025年湖南省醴陵市高考物理一轮复习测试卷及答案详解(历年真题)
- 2026年教科版三年级科学下册知识点梳理+教材习题答案
- 2026年人教部编版初一语文下学期期末考试卷及答案(共五套)
- 合成生物学伦理的全球框架
- 2025至2030中国母婴用品行业线上线下融合趋势及消费者偏好分析报告
- 《冲压模具CAD、CAE、CAM综合实训》课件-项目四:拉延模具CAD结构设计
- 2026届山西省忻州市忻州第一中学校高一下数学期末经典试题含解析
- 消化性溃疡疾病课件
- 生成式AI赋能的情境化小学英语教学策略研究教学研究课题报告
- 系统测量MSA培训课件
- 图书馆消防安全培训课件
- 2025年重点中学小升初招生考试语文试卷及答案
评论
0/150
提交评论