Web API 处理机制剖析 --- 拨开迷雾看本质
前言 最近开发了几个项目,用到了web api,也通过项目加深了对web api的理解。本文试图从内部原理讲解web api的本质。透过重重迷雾,看清本质,就能更好的把握和利用好web api。
1 Web API 的本质
1.1 交互说明
Web API 是基于http传输协议的函数调用。http是应用最广泛的传输协议,web服务端就实现了http服务器。由于web的流行,也带动了web服务器的完善和优化。web服务器的功能也不仅限于传输html文本,任何数据都可以通过文本传输(其实,图片,视频也可以通过变通的方式实现传输)。函数的调用就是发送数据和接收数据的过程;既然http也能发送和接收数据,当然也可以通过http实现函数调用,这就是web api。
http是传输协议,并不解释传输的内容。http协议同时也定义了一些标准的术语,方便客户端和服务端交互。一个典型的http发送和响应数据如下:
---->request
Request URL: https://www.baidu.com/ Request Method: GET Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 Connection: keep-alive Cookie: BAIDUID=43E2CBB543131B011BC1861E7CDD83DB:FG=1 Host: www.baidu.com Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36body data
<----reponse
Status Code: 200 OK Remote Address: 111.13.100.91:443 Referrer Policy: no-referrer-when-downgrade Bdpagetype: 1 Bdqid: 0xecff8dba0009a0bc Cache-Control: private Connection: Keep-Alive Content-Type: text/html Cxy_all: baidu+5bd9cbe0adf9080de3f7682cf8f45af1 Date: Fri, 19 Apr 2019 13:44:36 GMT Expires: Fri, 19 Apr 2019 13:44:05 GMT Server: BWS/1.1 Set-Cookie: BIDUPSID=43E2CBB543131B011BC1861E7CDD83DB; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com Set-Cookie: PSTM=1555681476; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com body data
http分为包头和包体,包头包含一些关键字段,如Accept,Cookie,这些是http的保留字。你也可以通过包头传输数据,只要不使用保留字就行。如:
myguid: 6F9619FF-8B86-D011-B42D-00C04FC964FF
通常包头传输一组函数公用的数据,比如有10个函数,这些函数都用到guid,可以把guid放入包头。
1.2 包体数据说明
http请求(request)数据:
a)对于浏览器的表单,包体数据格式如下:
key1=value1&key2=value2
就是key,value对,通过&号分割。key,value也可以是汉字,会做转义处理。这些细节不需要我们处理。只需要知道key、value可以是任何字符就行。
b)json和其他数据格式
对于web api,包体数据可以是json格式。当然不限于json,可以是任意形式的数据,只要双方对处理协议达成一致就行。
{"sites": [{ "name":"菜鸟教程" , "url":"www.runoob.com" }, { "name":"google" , "url":"www.google.com" }, { "name":"微博" , "url":"www.weibo.com" }] }
传输复杂的数据建议使用json,json函数可以把复杂的类变量序列化;对方反序列化,就可以得到一个类变量。这样,远程函数调用与本地调用区别就很小;仅仅多一层json序列化。
2 asp.net 对web API的实现
常言:巧妇难为无米之炊。对于web api,http承载的数据就是米,asp.net框架就是巧妇。web api的本质就是数据的发送和接收,asp.net 能做的的就是方便你的接收和返回。asp.net这里是好心帮程序员减轻负担,但这种好心也有副作用:很难探究web api的本质,遇到问题难以从本质上去分析解决。
2.1 数据如何变成函数参数
我们一般不处理http原始数据,这些数据一般会映射为函数参数。这种映射关系多种多样,见下图:
asp.net做这种映射处理就是为了减轻开发人员的负担,但是开发人员必须了解这些映射关系。不同框架处理这种映射逻辑也是不一样的,其实,开发人员可以定制自己的映射逻辑;但是好像没必要这样做,直接处理http数据,就是从asp.net request变量抽取http数据再处理,也增加不了多少工作量;这样反而使开发人员对底层数据了解更加透彻。
2.2 asp.net 客户端调用举例
使用类WebClient做为示例:
//客户端调用void clientPost(){using (var client = new System.Net.WebClient()){var postParam = new NameValueCollection();//传递参数postParam.Add("code", "123");postParam.Add("name", "tom);//http body部分就变为 code=123&name=tomvar responsebytes = client.UploadValues(uri, postParam);string strResult = System.Text.Encoding.UTF8.GetString(responsebytes);}}//服务端:string ServerDeal(string code, string name){//http body数据部分映射为参数:code为123,name为tomreturn "ok";}
NameValueCollection类将数据组成key、value对,并处理字符转义。通过上面的代码可以看出,web api调用其实很简单,框架帮我们做了数据映射,字符转义等常规操作,让我从繁杂的琐事中脱身,专注处理业务逻辑。后记:对事物的了解要抓住本质,只要了解了本质,就一通百通。web api原理并不繁杂,但是由于上层的封装,使我们很难了解到底层处理原理,导致很难抓住事物的本质。本文通过自身的领悟,试图剖析其本质,希望对读者有所裨益!
转载于:https://www.cnblogs.com/yuanchenhui/p/web_api_inside.html
Web API 处理机制剖析 --- 拨开迷雾看本质相关推荐
- 深入理解类加载机制:拨开迷雾见真章
Java语言将封装性表现的淋漓尽致,程序员在写Java代码的时候根本不用考虑自己写的代码在后期运行时是如何被JVM加载到内存中的,但是想告别CRUD,进阶为一名高级程序员的话,JVM的类加载机制必须了 ...
- ASP.NET Web API WebHost宿主环境中管道、路由
ASP.NET Web API WebHost宿主环境中管道.路由 前言 上篇中说到ASP.NET Web API框架在SelfHost环境中管道.路由的一个形态,本篇就来说明一下在WebHost环境 ...
- Web API 安全问题
目录 Web API 安全概览 安全隐患 1. 注入(Injection) 2. 无效认证和Session管理方式(Broken Authentication and Session Manageme ...
- 透过现象看本质: 常见的前端架构风格和案例
所谓软件架构风格,是指描述某个特定应用领域中系统组织方式的惯用模式.架构风格定义一个词汇表和一组约束,词汇表中包含一些组件及连接器,约束则指出系统如何将构建和连接器组合起来.软件架构风格反映了领域中众 ...
- 是时候拨开迷雾,看清5G当下的真面目了
撰文|太浪 编辑|猛哥 图源|网络 如果不是前财政部长楼继伟泼的一盆冷水,大家可能还会沉浸在5G社会已经来临的美好幻觉中. 2020年9月15日,楼继伟在经济50人论坛研讨会上发言称,"现有 ...
- [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了
园子里关于ASP.NET Core Web API的教程很多,但大多都是使用EF+Mysql或者EF+MSSQL的文章.甚至关于ASP.NET Core Web API中使用Dapper+Mysql组 ...
- Java反射机制剖析(一)-定义和API
1. 什么是Java反射机制 Java的反射机制是在程序运行时,能够完全知道任何一个类,及其它的属性和方法,并且能够任意调用一个对象的属性和方法.这种运行时的动态获取就是Java的反射机制.其 ...
- WebApi 路由机制剖析
阅读目录 一.MVC和WebApi路由机制比较 1.MVC里面的路由 2.WebApi里面的路由 二.WebApi路由基础 1.默认路由 2.自定义路由 3.路由原理 三.WebApi路由过程 1.根 ...
- ASP NET Web API 2框架揭秘
ASP.NET Web API2框架揭秘(.NET领域再现力作顶级专家精讲微软全新轻量级通信平台) 蒋金楠 著 ISBN 978-7-121-23536-8 2014年7月出版 定价:108.00 ...
- Web APi之消息处理管道(五)
前言 MVC有一套请求处理的机制,当然Web API也有自己的一套消息处理管道,该消息处理管道贯穿始终都是通过HttpMessageHandler来完成.我们知道请求信息存在 RequestMessa ...
最新文章
- 使用 Windows 命令行删除结果
- IBatis.Net学习笔记系列文章
- 互联网的尽头是乡村振兴
- 1.0 mysql的连接
- 享元模式在JDK源码中的应用——Java设计模式系列学习笔记
- php用script判断闰年,php判断/计算闰年的方法小结【三种方法】
- java 阅发布模式_redis发布订阅模式
- mysql sqlite 语法_[Sqlite] Sqlite的基本日常SQL操作语句汇总
- 计算机应用基础问题,计算机应用基础常见问题
- 什么是Tensor Flow和lite以及数据流图
- 读华东师范大学数学系之《数学分析》
- 宽带可调飞秒激光器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 生物信息学入门 富集分析与蛋白质互作用网络(PPI)的可视化 Cystocape入门指南
- Linux之查看物理主机的CPU温度
- a16z 2022 年加密行业研究报告(简)
- HDOJ 2504 又见GCD (水题)
- java joda datetime_Joda Time项目和java8时间api
- InZiv 为 MicroLED 显示检测技术筹集 1000 万美元
- 江苏联亚国际展览中心跨境展批发产品B2B门户线上展会平台matchup expo SEO工作日志
- 性别歧义代词(GAP) 2019年 NLP 研讨会性别偏见问题共同任务--阅读笔记
热门文章
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_7_练习_对文本的内容进行排序...
- c++第五版练习10.14 10.15
- c++ 类的定义和使用
- 推荐几款好用的CRM
- foreach(表达式中的类型标识符) 内含语句
- springboot访问路径添加项目名称、tomcat端口号
- 使用@AspectJ注解开发Spring AOP
- ssh登录失败处理步骤
- Appium+python自动化(十一)- 元素定位秘籍助你打通任督二脉 - 下卷(超详解)...
- C++知识点(三)函数