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 响应中获取 HTTPURLResponse
如何使用 Siesta Swift 使另一个 ViewController 的 post 请求返回的响应对象附加到 TableViewController