如何解决如何使用 Amplify 框架从 AWS 中的 API 获取 http 状态和详细响应? Amplify AndroidAmplify iOS
在我的 AWS 项目中,我使用 Lambda 和 API Gateway 创建了网络服务。 这些网络服务由我的 iOS 应用调用,使用 Amplify 框架。
在我的 lambda 函数中:
return {
statusCode: 200,body: JSON.stringify({
"example_key_1": "example_value","example_key_2": 123456789
})
};
return {
statusCode: 400,body: JSON.stringify({
"custom_error_code": 333333
})
};
在我的 iOS 应用中,我通过执行以下操作来调用我的 API:
Amplify.API.post(request: request) { result in
switch result
{
case .success(let data):
print("success: \(data)")
case .failure(let error):
print("error: \(error)"
}
}
现在,这是我需要从 API 响应中获取的信息:
换句话说,当我调用 API 时,我需要在我的 iOS 应用中获取 lambda 的每个 return
的全部内容。
根据 this 的说法,对于 Javascript 的 Amplify 框架似乎很容易实现,但我找不到适用于 iOS 或 Android 的等效框架。
如何使用 Amplify 框架实现这一目标?
谢谢。
解决方法
我在 iOS 项目中开发集成 API 网关时遇到了和你一样的问题。实际上,我为此提出了 PR。 Take a look.。不幸的是,他们关闭了那个 PR。但无论如何我开始在我的项目中使用我自己的 fork。已经上线2个月了。而且我没有遇到任何问题。
希望它会有所帮助。
,Amplify Android
val body = JSONObject()
.put("name","Mow the lawn")
.toString()
.toByteArray()
val request = RestOptions.builder()
.addPath("/todo")
.addBody(body)
.build()
Amplify.API.post(request,{ response ->
if (!response.code.isSuccessful()) {
Log.w("TAG","non-200 return code")
} else {
val data = repsonse.data.asString()
Log.i("Demo","OK! Data = $data")
}
},{ failure ->
Log.e("Demo","No response from server",failure)
}
)
Amplify iOS
let request = RESTRequest(path: "/todo",body: "my new Todo".data(using: .utf8))
Amplify.API.post(request: request) { result in
switch result {
case .success(let data):
let str = String(decoding: data,as: UTF8.self)
print("Success \(str)")
case .failure(let apiError):
switch apiError {
case .httpStatusError(_,let response):
println("\(response.statusCode)")
else:
println("No response from server")
}
}
}
,
从 1.7 版开始,您可以使用:
if case let .httpStatusError(statusCode,response) = error,let awsResponse = response as? AWSHTTPURLResponse {
if let responseBody = awsResponse.body {
print("Response contains a \(responseBody.count) byte long response body")
}
}
如 PR #1076
中所述版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。