NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

异步 REST 操作的处理

  • 2009-07-09
  • 本文字数:1409 字

    阅读完需:约 5 分钟

Tim Bray 在他的新博文 Slow REST 中尝试回答以下问题:

在 RESTful 的环境中,如何处理(POST、PUT、DELETE)等操作对资源状态的改变。这些操作存在延时,有时行为也不可预测。

Tim 为我们描述了解决这种问题三种不同方法,他们出自 Project Kenai 的正式报告《处理异步操作请求》的一部分,描述如下:

  • 基于资源的方法 > 新的“Status”资源模型……包含以下属性域:

    • “uri”:客户端进行轮询“完成状态”的 GET 操作所使用的 URI。每一个被接受的异步操作将收到一个唯一的状态 URI,这样就可以对多个操作同时进行初始化和跟踪。
    • “status”:它是一个整型数值,用于描述完成状态(0= 成功,非 0= 错误码),该状态码只有在“progress”返回 100 时才返回。
    • “message”:完成状态消息描述,只有在“progress”返回 100 时才返回
    • “progress”:指示操作的进度,整型数值,当操作完成执行时,不论是成功还是失败,都返回 100。

    上述资源对象可以这样使用: > 对于任何 PUT/POST/DELETE 操作,返回“202 In progress”,并返回“Status”资源,……目的是为实现者提供低成本的用于轮询的钩子(hook)。

  • Comet 风格的实现——为长运行的请求保持 HTTP 通道的开放。 > - 初始响应消息必须包含 202 的 HTTP 状态码(“Accepted”)……以及包含本次操作的初始 Status 资源的消息实体。在 Status 资源中一定要包含“uri”和“progress”两个属性,其中“progress” 域必须是 0,用于指定操作已经开始。

    • 初始响应消息的 URI 值必须包含对应着 GET 操作的新 Status 资源。典型地,“progress” 域的数值会向 100 增长,但是不到操作结束一定不能被设成 100。
    • 当操作结束时(成功或失败),状态资源的“最终”形式必须返回,其中“progress”域被设置成 100,“status”域被设置成 0(对于成功完成)或者非 0 的数值(对于失败的完成)。
  • “Web hooks”型:使用两个独立的“one-way”调用,一个用于启动长运行的操作,另一个用于在操作完成时通知请求者。 > - 请求操作的入站消息可能包含一个“webhook”域,如果客户端期待回调,该域的值是一个 URI;如果这个域不存在,则说明客户端不需要回调。

    • 操作完成时(成功或失败),服务器将向 webhook URI 发出一个 POST 请求,附带……包含 该操作最终状态资源的消息
    • 客户端通过对完成报告与初始 Status 响应中“URI”域的比较,找到的原始的请求,也可以通 过为每次异步请求提供一个唯一的 webhook URI 来将关联响应和请

Tim 在结束博文的结尾向大家征求意见:

……是否整个“Slow REST”能够作为一个模式?今后当人们考虑标准的实现方法时,是否会经常想起它。

Tim 的博文引起了若干回复,其中比较有意思的一条回复来自 William Vambenepe,他将 Tim 博文中提出的问题和解决方法同 WS* 标准(特别是 WSRF 和 WS-Notifications)中的问题和解决方法做了一个比较。William 认为:

WSRF 并没有覆盖博文中介绍的场景,但是在 WS-ResourceLifetime 和 WS-Notification 中我们依稀可见一些相似的场景(也许下次你就会碰到)。如果加入 WS-MakeConnection (WS- RX 的一部分),你的“web hooks”的想法可能会更切合实际……我常常有一种直觉:“REST”和“WS-*” 应该走得更近。

尽管在 REST 和 WS* 存在着很多差异(有些是实际存在的,有些是信仰上的),两个阵营都致力于解决实际生活中存在的问题,也必然会碰到相同的挑战。相互借鉴对方的实现和经验必然会互助互惠。

查看英文原文 Handling Asynchronous REST Operations

2009-07-09 22:075322
用户头像

发布了 184 篇内容, 共 76.8 次阅读, 收获喜欢 7 次。

关注

评论

发布
暂无评论
发现更多内容

【论文速读】| 大语言模型引导的协议模糊测试

云起无垠

[自研开源] MyData 数据集成任务的流程介绍 v0.7.1

LIEN

开源 数据集成 业务融合 API对接 mydata

graphpad prism for Mac(专业医学绘图工具)v10.2.1激活版

iMac小白

AutoCrypt for Mac(文档加密与解密软件)v2.5.2激活版

iMac小白

GraphicConverter 12 for Mac(图片浏览器)v12.1.1(6440)中文激活版

影影绰绰一往直前

英伟达要小心了!爆火的Groq芯片能翻盘吗?AI推理速度「吊打」英伟达?

蓝海大脑GPU

010 Editor for Mac(文本和十六进制编辑器)v14.0.1激活版

iMac小白

Sibelius西贝柳斯2023 mac永久使用 兼容M1/M2

Rose

Avid Sibelius 2023 Mac 西贝柳斯 Avid Sibelius

macOS 12 Monterey v12.7.4正式版

影影绰绰一往直前

macOS 13 Ventura (苹果最新系统)v13.6.5正式版

影影绰绰一往直前

Axure RP 10中文授权码及安装教程, 从交互设计到响应式原型

Rose

原型设计 软件下载 Axure RP 授权码 Axure RP 汉化包

Folder Icons for mac(文件夹个性化图标修改软件)v1.6激活版

iMac小白

Shell 检查程序进程是否存在,自动重启

最爱小胖子

为什么苹果用户都在使用Dynamic Wallpaper动态壁纸软件?

Rose

动态壁纸 Dynamic Wallpaper下载 苹果壁纸下载 Dynamic Wallpaper中文版 壁纸app

macOS Sonoma 14.4 (23E214) 正式版发布,ISO、IPSW、PKG 下载

sysin

macos macOS Sonoma

EagleFiler for Mac(Mac数字信息管理器)v1.9.13注册版

iMac小白

iTubeGo YouTube Downloader for Mac(YouTube 下载器)v7.4.1激活版

iMac小白

青否虚拟人/数字人对话软件!

青否数字人

数字人

MATLAB R2023b提示已停止工作怎么办?

Rose

数学软件 MATLAB R2023b

Calendar 366 II for Mac(日历管理软件)v2.15.3中文激活版

iMac小白

一文读懂私网解析 PrivateZone

火山引擎边缘云

DNS DNS服务器 DNS劫持 #DNS

macOS 14 Sonoma(最新MacOS系统) pkg完整安装包14.4正式版

影影绰绰一往直前

AI数字虚拟人来了你会失业吗?

小魏写代码

益和热力选择 TDengine,实现智慧供热系统升级

TDengine

tdengine 时序数据库

YT Saver for Mac(视频下载和转换器)v7.4.1激活版

iMac小白

ToothFairy for Mac(一键蓝牙设备连接切换软件)v2.8.4中文版

iMac小白

Simplemind pro for Mac(mac上的思维导图软件)v2.3.3中文激活版

iMac小白

office 2016专业增强版 含office2016激活工具 mac/win

Rose

office办公软件 Office 2016 下载 office2016破解版 Msoffce2016

文心一言 VS 讯飞星火 VS chatgpt (210)-- 算法导论16.1 1题

福大大架构师每日一题

福大大架构师每日一题

LLM 大模型框架 LangChain 可观测性最佳实践

心有千千结

观测云 LLM langchain

如何将应用一键部署至多个环境?丨Walrus教程

SEAL安全

MySQL 运维 应用部署 Walrus

异步REST操作的处理_SOA_Boris Lublinsky_InfoQ精选文章