java - 通过 API 调用获取图像,然后保存并从本地提供以供重复查看
问题描述
我目前正在开发一个将显示项目列表的网络应用程序。该列表是动态的,并且可以在用户之间更改。一个很好的类比是将对象视为书籍,数据库支持它作为图书馆。
我的数据库Book
将包含图书馆中所有书籍的列表。
- 用户可以将一本书添加到他们的收藏中。
- 如果用户想要将新书添加到他们的收藏中,他们也会将其添加到图书馆。
- 如果用户想要将一本新书添加到他们的收藏中并且它存在于图书馆中,则不会将任何内容添加到图书数据库中。
目前我的表非常简单:Book(id, name)
. 我可以通过 API 调用访问有关这些书籍的大量信息,例如封面、页数等。我想存储这些信息的一个子集,尤其是图像 url。
我认为一个明智的方法是更改我的 Book 表,使其看起来像:Book(id, name, imageUrl, otherValue, idOfThisBookInApiCallTable)
该idOfThisBookInApiCallTable
值将允许我根据需要获取其他属性,但是我有两个问题,我不确定如何继续.
首先是这个表很容易与 APITable 过时。我预计不会有太大的变化,如果有的话,但风险是存在的。
其次,存储的图像是我主要关心的问题,在可能有 50 本书的页面上,我每次都会调用图像的 url。我认为一个明智的解决方案是在本地下载图像,然后在重复访问时提供它,但我不确定这是否是正确的方法。
请问是否有人可以看到这种方法的任何问题和/或建议更好的方法?我在 db/web/app 设计方面的经验有限,所以有点超出我的深度。
如果在本地保存图像是正确的方法,是否有“最佳”方法?提前感谢您的任何帮助/建议/建议。
解决方案
我可以分享我合理设计的 2 美分,但我认为这个问题太宽泛了,而且主要是基于意见的。让我们一次处理一件事。
- 首先关于你的
Book
桌子。为什么不使用一张Library
表来维护图书馆的当前状态以及图书馆目前拥有的所有书籍。 - 每个用户都可以持有一个集合(一个表等,具有一对多关系,例如 user_id 到 book_ids 列表或其他),然后每个用户都拥有 bookID 的一个子集。
- 通过用户或图书馆添加新书时(图书馆也可以添加更多书籍,即使没有特定用户将其带入)然后始终将其添加到图书馆,如果 user_id 是这本书的“所有者”已知的,请添加此用户的关系以及集合表中的关系
- 一本书的更多细节可以单独存储在一个
BookDetails
表中。 - 在您身边存储图像始终是一个不错的选择,并且您不希望在一遍又一遍地请求时被 API 阻止过度使用。您可以使用一些云存储,例如 s3,您可以在其中保留图像,然后不打扰外部 api。S3 支持压缩和缓存,因此您可以节省大量时间并且不会遇到速度问题。
以上所有观点只是我根据您在问题上提供的信息的看法。对于您的用例,情况当然会有所不同。
推荐阅读
- github - 当我的团队成员在 GitHub 存储库中推送更改时,我的 azure 管道没有触发
- kubernetes - ClusterIssuer 与基于 Cloudflare 的 DNS 求解器
- flutter - Stream Builder颤动不更新
- javascript - ExpressJs:触发了错误的 api 端点
- c# - 使用 .nuspec 和 .targets (C++) 制作的 nuget 包
- python - 如何为 Pytorch 模型提供复杂的输入和复杂的权重?
- flutter - 如何在颤动中正确地渲染表情符号?
- spring-boot - 如何在 spring-data-elasticsearch 中创建索引后更新索引设置
- c# - Guid[]:如何从 Cosmos DB 中查询和获取详细信息?
- questdb - 如何查询已导入的 CSV 数据集?