Siesta configureTransformer for Resource 带参数

Posted

技术标签:

【中文标题】Siesta configureTransformer for Resource 带参数【英文标题】:Siesta configureTransformer for Resource with parameters 【发布时间】:2019-02-06 22:11:58 【问题描述】:

我正在尝试为带有参数的端点配置转换器。

我成功地为不包含任何参数的端点配置了转换器。但似乎当我尝试对带有参数的 Resource 执行相同操作时,它不起作用。

这是我配置转换器的方式:

var getExampleData: Resource  return resource(exampleDataEndpoint) 
configureTransformer(getExampleData) 
            try jsonDecoder.decode(ExampleDataResponse.self, from: $0.content)

这就是我发送请求的方式:

Api.getExampleData.withParam("foo", "bar").addObserver(self).loadIfNeeded()

我得到了响应,但它从未通过变压器管道。

Response:  200 ← GET http:example.com/enpoint?foo=bar
Siesta:pipeline │ [thread ᎠᏔᎼᎼ]  └╴Response after pipeline: success: 28 bytes

编辑

在工作正常的转换上测试了.withParam() 方法,似乎 URL 必须相同才能使 Siesta 转换器工作,这真是太糟糕了。

【问题讨论】:

【参考方案1】:

不同的查询字符串表示不同的网址,different URLs mean different Siesta resources:

请注意,“URL”包括整个 URL:协议、主机、路径和查询字符串。但是,它不包括标题。不同的查询字符串?不同的资源。 http与https?不同的资源。

因此:

let resource0 = Api.getExampleData
let resource1 = Api.getExampleData.withParam("foo", "bar”)
resource0 == resource1  // → false

所以当你这样做时:

configureTransformer(getExampleData)  ... 

...仅适用于getExampleData,不适用于具有不同参数的任何变体。

如果要将配置应用于共享路径的所有资源,请在路径上匹配:

configureTransformer("/example/path")  ... 

【讨论】:

以上是关于Siesta configureTransformer for Resource 带参数的主要内容,如果未能解决你的问题,请参考以下文章

Siesta 作为 SwiftPM 在 Linux 上的依赖项

Swift Siesta - 如何将异步代码包含到请求链中?

Siesta 加载在陈旧资源上失败

从 Siesta 响应中获取 HTTPURLResponse

从基于 Siesta 实体的 JSON 初始化领域对象失败

如何使用 Siesta Swift 使另一个 ViewController 的 post 请求返回的响应对象附加到 TableViewController