gpt4 book ai didi

iphone - 异步无状态API

转载 作者:行者123 更新时间:2023-12-03 21:12:39 26 4
gpt4 key购买 nike

想象一个列出一些食谱的表格 View 。每次用户点击菜谱时,都会加载一个新的表格 View ,列出菜谱成分。

为了获取信息,我使用以下方法异步调用 REST API:

NSURLRequest *request = [NSURLRequest requestWithURL:url
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval:30];

当用户点击菜谱时,会调用 API 来获取菜谱成分。但是,一旦进入新 View (列出成分)并且在收到答案之前,用户可以返回并选择新食谱。

在这种情况下,我会收到两个答案;每个请求一个。问题是我不知道这个答案是针对什么请求的,我将使用错误答案中的错误内容刷新 UI。

我不确定在这种情况下哪种方法是正确的。我正在考虑在答案中包含每个请求参数。因此,例如,如果我使用 API 搜索某个术语,我们说“foo”,我也会在答案中包含该术语,例如:

请求:

http://domain.com/api/search?term=foo

回答

{
"requestType": "search",
"term": "foo",
"result" : "a foo result"
}

在每个答案中包含每个请求参数对我来说看起来很奇怪,但这是我发现的唯一可以创建可异步调用的无状态 API 的解决方案。

还有其他方法可以实现这一点吗?

(我使用委托(delegate)模式为每个请求分配一个对象,该对象在收到答案时调用。问题是,在菜谱示例中,每次列出菜谱配料时都会重用配料 TableView ) .

最佳答案

一种可能性是在请求中包含唯一的“请求 ID”,并让服务器回显它。那么服务器不需要返回所有的请求参数,只需要返回请求ID即可。客户端将为每个请求生成一个新的 ID,可能使用像递增整数这样简单的方法。

另一种可能性是创建“可取消的异步请求”。当您发出请求时,返回一个可用于取消请求的对象。如果在委托(delegate)被解雇之前取消请求,则确保委托(delegate)不会被解雇。当收到已取消请求的响应时,只需将其丢弃即可。对于您的成分表,在发出新请求之前,您需要取消任何待处理的请求(以便一次最多有一个未取消的请求)。

实现此目的的一种方法是构建一个两阶段回调。第一个回调由基础设施管理,仅检查请求是否被取消。如果没有,它将继续调用第二个回调(实际上是您的委托(delegate))。

关于iphone - 异步无状态API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2123972/

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