搞iOS UI 自动化的同时涉及到了给后端发送请求,请求数据的格式常用的有json格式和表单格式,这两种格式如何区分,如何使用,特此总结了一下。
表单格式(Form Data)
传统的 HTML 表单使用的请求体格式,尤其是在提交表单时。数据通常是键值对的形式,多个键值对通过 & 分隔,编码为 application/x-www-form-urlencoded 或 multipart/form-data。
用途:常用于用户表单提交,尤其是在文件上传时使用 multipart/form-data。
Content-Type:
application/x-www-form-urlencoded(标准表单数据)
multipart/form-data(用于文件上传)
数据示例(编码后):
countryAbbr=CN&countryCode=86&email=test%40example.com&password=abc123&type=1
请求头:
Content-Type: application/x-www-form-urlencoded
适用场景:
与浏览器的原生表单提交兼容。
简单键值对数据,字段数量有限时使用。
2. JSON 格式
特点:
使用 application/json 作为 Content-Type。
数据以 JSON 格式传递,支持复杂嵌套和结构化数据。
适用于现代 Web API 和 RESTful 接口。
数据示例:
{"countryAbbr": "CN","countryCode": "86","email": "test@example.com","password": "abc123","type": 1
}
请求头:
Content-Type: application/json
适用场景:
数据复杂且需要嵌套(例如数组、对象)。
现代应用程序,尤其是前后端分离架构。
3. 具体区别
方面 | 表单格式(Form Data) | JSON 格式 |
---|---|---|
数据编码 | key=value&key=value | JSON 字符串 |
数据复杂度 | 仅支持键值对,嵌套复杂结构需要额外编码 | 支持复杂嵌套数据(如数组、对象) |
Content-Type | application/x-www-form-urlencoded | application/json |
可读性 | 编码后难以阅读(如 %40 表示 @ ) | 可读性高,结构清晰 |
兼容性 | 与 HTML 表单默认行为兼容 | 更适合现代 Web API |
数据大小 | 一般适用于小规模键值对 | 可传递大规模、复杂的数据 |
发送方式 | 常用 data 参数,直接编码 | 常用 json 参数,自动序列化为 JSON 字符串 |
处理方式 | 服务器端需要解析 application/x-www-form-urlencoded | 服务器端直接解析 JSON |
4. 如何区分使用场景
选择表单格式:
简单表单提交(例如登录、搜索)。
需要兼容旧系统或与 HTML 表单直接交互。
选择 JSON 格式:
API 设计倾向于现代 RESTful 风格。
数据复杂、需要嵌套或结构化传递。
需要保持高可读性,方便调试。
5. 代码区别
表单格式请求:
data = {'key1': 'value1','key2': 'value2'
}
rsp = requests.post(url, headers={'Content-Type': 'application/x-www-form-urlencoded'}, data=data)
JSON 格式请求:
json_data = {'key1': 'value1','key2': 'value2','nested': {'subkey': 'subvalue'}
}
rsp = requests.post(url, headers={'Content-Type': 'application/json'}, json=json_data)
总结:
Content-Type 是关键区别之一,它告诉服务器数据的格式。
JSON 格式比表单格式支持更复杂的数据类型,更适合现代应用程序。
表单格式适合于简单的键值对数据传输,兼容性更好。
除了 JSON 和表单格式请求体,常见的请求体格式还有 XML、Protobuf、YAML、MessagePack、CBOR 等。选择哪种格式通常取决于数据的结构、性能需求、与其他系统的兼容性以及所使用的服务协议。
JSON 和 XML 是最常见的数据格式。
Protobuf、MessagePack 和 CBOR 更适合需要高效数据传输的场景。