Uri路径扩展映射(URI Path Extension Mapping)是Web API中一种将文件扩展名映射到特定内容类型或处理程序的机制。它允许客户端通过在URI路径末尾添加文件扩展名(如.json、.xml等)来指定期望的响应格式。
当客户端请求一个带有扩展名的URI时(如/api/products.json
),Web服务器会根据扩展名决定:
.json
- 返回JSON格式.xml
- 返回XML格式.csv
- 返回CSV格式.php
- PHP处理.aspx
- ASP.NET处理/api/v1/products.json
)// 在Startup.cs中配置
public void Configure(IApplicationBuilder app)
{
app.UsePathBase("/api");
var format = new RequestDelegate(async context =>
{
var path = context.Request.Path.Value;
if (path.EndsWith(".json"))
{
context.Response.ContentType = "application/json";
await context.Response.WriteAsync(JsonConvert.SerializeObject(new { Message = "JSON Response" }));
}
else if (path.EndsWith(".xml"))
{
context.Response.ContentType = "application/xml";
await context.Response.WriteAsync("<Message>XML Response</Message>");
}
});
app.Map("/products", format);
}
const express = require('express');
const app = express();
app.get('/api/products.:format', (req, res) => {
const format = req.params.format;
const data = { id: 1, name: "Product" };
switch(format) {
case 'json':
res.json(data);
break;
case 'xml':
res.type('application/xml');
res.send(`
<product>
<id>${data.id}</id>
<name>${data.name}</name>
</product>
`);
break;
default:
res.status(400).send('Unsupported format');
}
});
app.listen(3000);
现象:自定义扩展名与系统保留扩展名冲突
解决:使用前缀或特定命名空间,如/api/products.format.json
现象:相同内容不同URL影响搜索引擎排名 解决:使用规范URL标签或301重定向
现象:不同格式响应被错误缓存
解决:正确设置Vary头,如Vary: Accept
现象:扩展名可能被用于攻击 解决:验证和限制允许的扩展名
URI路径扩展映射是一种简单有效的API设计模式,特别适合需要支持多种数据格式的Web服务。
没有搜到相关的文章