我正在尝试使用参数为端点配置转换器。
我成功地为不包含任何参数的终结点配置了转换器。但是当我尝试使用参数对资源执行相同操作时,它似乎不起作用。
这是我配置变压器的方式:
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 变压器工作,这很糟糕。
不同的查询字符串表示不同的 URL,不同的 URL 表示不同的 Siesta 资源:
请注意,"URL"包括整个 URL:协议、主机、路径和查询字符串。但是,它不包括标头。不同的查询字符串?不同的资源。http vs https?不同的资源。
因此:
let resource0 = Api.getExampleData
let resource1 = Api.getExampleData.withParam("foo", "bar”)
resource0 == resource1 // → false
因此,当您执行此操作时:
configureTransformer(getExampleData) { ... }
。这仅适用于getExampleData
,不适用于不同参数的任何变体。
如果希望将配置应用于共享路径的所有资源,请在路径上进行匹配:
configureTransformer("/example/path") { ... }