Java 如何确定请求类型是同步的还是异步的

Java 如何确定请求类型是同步的还是异步的,java,web-services,rest,http,asynchronous,Java,Web Services,Rest,Http,Asynchronous,实际上,我的要求是,客户端可以在同步(请求-响应)或异步(请求-确认-响应)模式下调用基于rest的服务。现在,根据请求类型,我必须遵循模式 现在,我的问题是,是否有任何方式,从请求本身,默认情况下,是否有任何指示符,它将告诉客户需要请求-响应模型。 服务协议是http 如果不可能,那么处理这种情况的最佳实践是什么。要区分两个请求,您可以将头中的属性与请求一起传递 如果是同步请求 设置标题:RequestType:同步 如果是异步请求 集合头:RequestType:异步 这是您可以使用的最简单

实际上,我的要求是,客户端可以在同步(请求-响应)或异步(请求-确认-响应)模式下调用基于rest的服务。现在,根据请求类型,我必须遵循模式

现在,我的问题是,是否有任何方式,从请求本身,默认情况下,是否有任何指示符,它将告诉客户需要请求-响应模型。 服务协议是http


如果不可能,那么处理这种情况的最佳实践是什么。

要区分两个请求,您可以将头中的属性与请求一起传递

如果是同步请求

设置标题:RequestType:同步

如果是异步请求

集合头:RequestType:异步


这是您可以使用的最简单的方法。

您可以让客户端指定其首选项,以便通过标头接收异步响应:

Prefer: respond-async
您可以在此处找到详细信息:。
我不知道有什么方法可以显式地请求相反的同步响应。

我认为这种类型的信息应该出现在http头中(如果不是自动的,客户端应该设置一些自定义头),因此,您可以区分同步/异步和相应的操作。如果客户端不告诉服务器它期望的响应类型,那么服务器应该如何知道?服务器(一般来说)不是通灵者!您必须发送一些关于客户意图的指示<其中一个答案中的code>respond async似乎至少是一个标准化的选项(尽管我不知道它的使用范围有多广)。如果您处理异步请求的方式与处理同步请求的方式不同,那么您的设计就会出现一些问题。客户端异步调用您是客户端的设计选择,这不应该对服务器有任何影响。@prakashb:这也是我的第一反应,但我想他不是在说客户端上异步处理单个请求,但是关于服务器异步处理来自客户端的调用,即立即返回
202
接受的返回代码,然后继续处理请求(通常以某种方式让客户端询问处理进度)。@JoachimSauer Ok-谢谢,这很有意义。然后,看起来是最好的方法,如果报头不存在,那么他应该假设它正在寻找同步响应。除了异常场景之外,我想不出这种方法有什么陷阱。如果客户端进行异步处理,它可以捕获错误响应并在某个地方记录下来。在这种方法中,他需要不断地进行投票来询问进展情况。谢谢你的回答。。但是否有任何方式,客户端显式地不必设置任何头。。默认情况下,requestone解决方案会有一些提示,即您可以创建自己的HTTP客户端API,并将其作为JAR提供给您的客户端,这样,无论何时他们进行调用,他们都必须使用您的API来自动处理此功能,您必须在您的API中定义与上面提到的相同的概念,这将使您的客户机的生活更加轻松。但这里的区别是,您给bundle API的不是通知您的客户设置这些参数,而是代表您做同样的工作。。我当然可以这样做。。但是我的服务将与这个JAR紧密耦合。我不喜欢。。。我正在寻找一些默认情况下来自请求的指示您可以访问您的内部系统,但您无法访问外部系统,相反,我建议您使用不会根据您的情况紧密耦合的API,因为您提供了调用URL的灵活性,但当有人使用您的API调用URL时,您的API足够智能,可以将这些头与请求一起追加。你要做的唯一一件事就是你必须告诉你的客户在他们调用你的system.bro时使用你的API,如果外部客户不是java。。。这种类型的API将是注册的服务。即使我必须遵循显式的头部概念,那么,证明调用我的服务的特定API也不是一个好方法。。。最好向客户提供文档