其余 api 设计和上传图像的工作流程。

2024-02-22

我想设计一个API,允许客户端上传图像,然后应用程序创建图像的不同变体,例如调整大小或更改图像格式,最后应用程序将每个变体的图像信息存储在数据库中。当我尝试确定执行此任务的正确策略时,就会出现问题,以下是我能想到的一些不同策略。

策略一:

发送帖子请求至/api/pictures/, 创建所有图像变体并返回201 created如果所有图像文件都正确创建并且图像信息已保存到数据库中,否则返回500 error.

pros:易于实施

cons:客户端必须等待很长时间才能创建图像的所有变体。

策略2:

发送帖子请求至/api/pictures/,仅创建图像变体所需的信息并将其存储在数据库中,然后返回202 accepted,并开始创建实际的图像变体文件,202响应包含一个带有新 url 的位置标头,例如/api/pictures/:pictureId/status“监视”图像变体创建过程的状态。客户端可以使用这个url来检查进程是否完成,如果进程完成返回一个201 created,如果进程处于挂起状态,则返回200 ok,如果过程中出现错误,则结束并返回410 gone

pros:客户端可以获得非常快的响应,并且不必等到创建所有图像变体。

cons:很难实现服务器端逻辑,客户端必须不断检查返回的位置 url,才能知道进程何时完成。 另一个问题是,例如,当正确创建图像变体但失败时,整个过程会返回一个410 gone,客户端可以继续向状态 URL 发送请求,因为应用程序将尝试再次创建失败的图像,并返回201当它正确结束时。

策略3:

这与策略 2 非常相似,但它不是返回整个“流程”的位置,而是返回一个位置数组,其中包含每个图像变体的状态 url,这样客户端就可以检查每个图像变体的状态,而不是检查每个图像变体的状态。整个过程的状态。

pros:与策略2相同,如果一个图像变体在创建过程中失败,其他变体不受影响。例如,如果其中一个变体在创建过程中失败,它将返回410 gone而正确创建的图像会返回201 created.

cons:客户端很难实现,因为它必须跟踪一系列位置而不仅仅是一个位置,请求数量与变体数量成比例增加。

我的问题是完成这项任务的最佳方法是什么?


你真正的问题是如何处理 HTTP 中的异步请求。我解决这个问题的方法通常是采用选项 2,返回202 Accepted并允许客户端检查当前状态GET on the LocationURI,如果他愿意的话。

或者,客户端可以在请求标头上提供回调 URI,我将使用它来通知完成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

其余 api 设计和上传图像的工作流程。 的相关文章

随机推荐

  • 具有多种模式的 Lua string.gsub

    我正在努力重命名包含不需要的字母的电影标题 这string gsub可以用 nil 值替换字符串 但我有大约 200 个字符串模式需要用 替换 现在我必须string gsub对于每个模式 我在想是否有一种方法可以将所有字符串模式放入单个字
  • Linux 中串行端口描述符块上的“关闭”函数

    最近我发现了一个对我来说很新的问题 我很感激建议 我正在 Linux 上使用 termios 函数进行串行通信 我实际上没有使用真正的串口 而是使用虚拟小工具串口驱动程序 dev ttyGS0 文件描述符以非阻塞方式打开 我的程序定期生成数
  • 为什么在 C# 中使用 PKCS7 和 X509Certificate 打开数字签名的 pdf 文档时出现错误?

    我正在尝试使用签名 pdf 文件PKCS7 and X509Certificate但是当我在 Adob e 中打开签名的 pdf 文件时出现以下错误 文件自签署以来已被更改或损坏 文档哈希 66305799d97adc716694faa3a
  • 我们应该忽略Pycharm .idea/文件夹中的misc.xml和.iml吗?

    我的谷歌搜索给了我这个线程 https stackoverflow com a 11968647 248616这将引导我们访问 Pycharm 官方网站here https intellij support jetbrains com hc
  • 如何在 Twisted 中将 TCP Keepalive 与端点一起使用?

    扭曲确实支持TCP 保活 https twistedmatrix com documents 13 0 0 api twisted internet tcp Connection html setTcpKeepAlive 但我找不到一种简单
  • 读/写 NetworkX 图形对象

    我正在尝试处理具有数亿个节点的超大规模 NetworkX Graph 对象 我希望能够将其写入文件 以免消耗我所有的计算机内存 然而 我需要不断地搜索现有节点 更新边缘等 对此有好的解决办法吗 我不确定它如何与提供的任何文件格式一起使用ht
  • 带有剪辑路径的 SVG 直线路径在 Chrome 中不可见

    我相信我在 Chrome 的 SVG 渲染中发现了一个错误 但我想知道是否有任何解决方法 使用这样的代码
  • ASP.NET Core RC2 作为 Linux 守护进程

    我需要有关作为 Linux 守护进程托管 NET Core 控制台或 ASP NET 应用程序的信息 Microsoft Hosting WindowsService 已经支持将应用程序托管为 Windows 服务 但我需要类似的 Linu
  • 如何在 ui-router 状态转换之间调出“正在进行”的加载栏?

    我有一个使用 ui router 的 AngularJS 应用程序 有时 应用程序在从一种状态转移到另一种状态时以及解析仍在进行中时会等待 有没有人有 或他们见过 任何示例 说明如何在从一种状态解析到另一种状态期间在屏幕上呈现 正在进行的
  • Grepping 一个大文件(80GB)有什么方法可以加快速度吗?

    grep i A 5 B 5 db pd Clients eightygigsfile sql 它已经在一个相当强大的 Linux 服务器上运行了一个小时 否则不会过载 grep 有什么替代品吗 关于我的语法有什么可以改进的地方 egrep
  • sveltejs 中的响应式全宽画布

    我对 svelte 很陌生 我正在尝试使用 svelte 在全屏上渲染画布 听起来很容易做到 但我无法让它正常工作 我正在绑定一个width and height变量为clientWidth clientHeight父级并使用这些变量来设置
  • VB.NET 中 IsNumeric() 的错误结果

    我在 VB NET 中有一个函数 它循环遍历值并尝试将其转换为小数 如果IsNumeric是真的 Dim Value As String If IsNumeric Value True Then Rate CType Value Decim
  • 在 excepthook 中打印原始异常

    我正在设置系统异常钩子这样我就可以记录发生的每个异常 让我们使用以下示例 而不是写入日志 def excepthook self type value traceback print n print type print value pri
  • 无法在opencv中加载haarcascadeshaarcascade.xml

    我尝试在 android 中使用 opencv 进行人脸检测 但无法加载对象检测 xml 文件 代码如下 static CvHaarClassifierCascade cascade 0 CvMemStorage storage 0 LOG
  • Excel 删除 Python 插入的有效公式

    我正在尝试使用 Python 生成 Excel xlsx 报告openpyxl 但有一个问题 Excel 不断从我的工作表中删除公式在一些特定的细胞中 我打印了正在插入的内容 它似乎绝对有效 如果我将其从控制台粘贴到单元格 它会显示确切的结
  • 我该如何:Git 单向推送/不可编辑的工作目录?

    有没有办法拥有两台机器 假设A和B A 是我的本地计算机 我在其中开发代码并推送它 B 是一个服务器 永远不需要编辑代码 但需要一个工作目录 是否有可能做到这一点without做任何事git pull是来自 B 的什么吗 基本上 我只想以一
  • 为什么 tokio::spawn 即使使用 .clone() 也会抱怨生命周期?

    我试图编译以下看似简单的代码 但出现错误 use std io Error derive Debug struct NetworkConfig bind String node key file String async fn networ
  • 检测视图控制器何时进入后台并恢复

    我正在实现一个具有以下要求的 ViewController 如果用户在 15 分钟后返回应用程序 则视图应重新加载数据 我正在考虑使用viewDidDisappear当应用程序进入后台时保存时间戳viewDidAppear用于检查以前保存的
  • 更新复选框并从颤动对话框中返回值

    我正在尝试将一些城市列表添加到带有复选框的对话框中 以便我需要实现多次单击项目 我正在尝试做的事情如下所示 onPressed从按钮调用 Rest Service 并在成功结果时我只显示一个对话框 void showCityDialog B
  • 其余 api 设计和上传图像的工作流程。

    我想设计一个API 允许客户端上传图像 然后应用程序创建图像的不同变体 例如调整大小或更改图像格式 最后应用程序将每个变体的图像信息存储在数据库中 当我尝试确定执行此任务的正确策略时 就会出现问题 以下是我能想到的一些不同策略 策略一 发送