restful api返回xml需遵循rest原则,明确content-type为application/xml,语义化设计结构,规范空值、布尔值和日期格式,并提供xsd或文档说明约束。

RESTful API返回XML格式,核心是遵循REST原则的同时,让XML结构清晰、可读、易解析。不推荐强行用XML模仿JSON风格,而应利用XML的命名空间、属性、嵌套等特性表达语义。
响应头必须明确声明Content-Type
客户端靠Accept请求头表明想要XML,服务端需在响应中返回准确的Content-Type: application/xml(或text/xml,但application/xml更规范)。若支持多种格式,优先按Accept协商,不要忽略客户端意图。
- 示例响应头:
Content-Type: application/xml; charset=utf-8 - 避免硬编码为
text/html或漏设charset,否则中文可能乱码 - 如果API同时支持JSON和XML,建议统一用
application/*+xml或自定义媒体类型(如application/vnd.myapi.v1+xml)提升版本管理能力
XML结构要语义化,避免过度扁平或嵌套
用元素名表达资源含义,用属性表达元数据(如ID、状态、时间戳),内容体放可读值。根元素建议用复数名词对应集合,单资源用单数,与URL路径保持逻辑一致。
- 比如
GET /users/123→ 返回<user id="123"><name>Alice</name><email>a@example.com</email></user></li> <li><code>GET /users
→ 返回<users><user id="123">...</user><user id="456">...</user></users></li> <li>避免把所有字段都塞进属性(如<code><user name="Alice" email="a@example.com" created="2024-01-01"/>
),不利于扩展和国际化
处理空值、布尔值和日期要有约定
XML本身没有原生null、true/false或ISO日期类型,需靠约定保证客户端能稳定解析。
- 空值:用
nil="true"属性(遵循XSI规范),如<phone xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></phone> - 布尔值:统一用小写
true/false字符串,不写1/0或YES/NO - 日期时间:严格使用ISO 8601格式(如
2024-03-15T14:30:00Z),带时区信息;避免“2024-03-15”这种模糊格式
提供XSD或文档说明关键约束
XML比JSON更重,客户端常需预知结构做校验或生成模型。虽不强制发布XSD,但至少在API文档中标明:
- 哪些字段必填、哪些可选
- 字段类型(string、integer、datetime等)和格式要求
- 嵌套层级限制(如
address下最多1个phone) - 是否允许重复元素(如多个
tag)
有XSD的话,可在响应中通过xsi:noNamespaceSchemaLocation提示位置,方便调试工具加载验证。










