gpt4 book ai didi

android - 通过 REST API 提供多种图像分辨率

转载 作者:可可西里 更新时间:2023-11-01 04:34:54 25 4
gpt4 key购买 nike

我们正在开发一个 REST API,作为我们的 iOS 和 Android 应用以及 AngularJS 网络应用的后端。为了优化性能,我们必须提供各种分辨率的图像。我正在寻找关于如何为客户提供正确的图像 URL 以适应其设备分辨率的指导。我可以想象三种可能性:

<强>1。客户端具有确定图像的分辨率相关 URL 的逻辑。
REST API 返回规范图像 URL:

{
"user": {
"id": 1,
"image_profile": "https://cdn.mydomain.com/abcd.jpg"
}
}

然后客户端知道如何更改 URL 以获得所需的解析。
例如。类似于:https://cdn.mydomain.com/abcd@2x.jpghttps://cdn.mydomain.com/w_100,h_100/abcd.jpg .

这是基于这样的想法,即客户端确切地知道图像将去哪里以及需要什么尺寸和分辨率。缺点是客户端的逻辑更多。例如,这可以通过 http://cloudinary.com/ 等服务来实现。 .

<强>2。服务器为每个图像提供不同的版本。
REST API 返回所有可用的图像 URL:

{
"user": {
"id": 1,
"image_profile": {
"url": "https://cdn.mydomain.com/abcd.jpg",
"versions": {
"mhdpi": "https://cdn.mydomain.com/abcd_mhdpi.jpg",
"lhdpi": "https://cdn.mydomain.com/abcd_lhdpi.jpg",
"2x": "https://cdn.mydomain.com/abcd@2x.jpg",
"web": "https://cdn.mydomain.com/abcd_web.jpg"
}
}
}
}

在此解决方案中,客户端需要较少的逻辑,并且调整图像大小的实现独立于客户端。响应变得有点污染。

<强>3。服务器根据用户代理(或任何其他参数)自动返回正确的图像
客户端可以在用户代理 header 中指定其预期的分辨率(或者可以将类似 ?resolution=2x 的内容附加到每个请求。
对于 iPhone 5S (iOS 7.1) 的示例用户代理,API 会自动返回正确的图像:

{
"user": {
"id": 1,
"image_profile": "https://cdn.mydomain.com/abcd@2x.jpg"
}
}

客户端不会注意到解析问题,但这种方法使响应不易缓存,感觉最像魔法。

能否请您提出其他解决方案,详细说明所提供解决方案的优缺点,并为我提供一些有关知名 API 如何处理此问题的资源?

最佳答案

第二个选项最适合 RESTful API 设计,具有随之而来的固有优势。

依次进行:

<强>1。如果您出于任何原因需要更改图像标识符 URL 格式,则客户端更改 URL 可能会破坏客户。

<强>2。服务器提供多个版本 最符合 RESTful 方法,其主要好处是更改 URL 格式不会破坏现有客户端。它还允许可扩展性,这可能是 self 描述的和机器可读的(有一个小的变化),如下所示:

{
"user": {
"id": 1,
"image_profile": {
"url": "https://cdn.mydomain.com/abcd.jpg",
"versions": {
"100": "https://cdn.mydomain.com/abcd_mhdpi.jpg",
"150": "https://cdn.mydomain.com/abcd_lhdpi.jpg",
"300": "https://cdn.mydomain.com/abcd@2x.jpg",
"72": "https://cdn.mydomain.com/abcd_web.jpg"
}
}
}
}

...即您可以将标识符重新定义为“DPI”图形或类似的东西。我不知道你的客户端应用程序有多先进;但他们可能会为正在使用的屏幕尺寸寻找 DPI 的数字“最接近匹配”。然后,您可以在未来相应地插入其他决议。

<强>3。服务器使用agent string避免了选项1的风险;但客户端应用程序本身最适合做出解决方案决策,因为它更了解上下文。

总结

选项 2 不会以任何方式限制您;也是最有弹性的,可以避免将来发生重大变化。

关于android - 通过 REST API 提供多种图像分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23528432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com