0

在我的 AWS 项目中,我使用 Lambda 和 API Gateway 创建了 Web 服务。这些 Web 服务由我的 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 的响应中获取的信息:

  • 出现错误时的状态码
  • 响应的正文,是否有错误

换句话说,return当我调用 API 时,我需要在我的 iOS 应用程序中获取每个 lambda 的全部内容。

根据这个,使用 Javascript 的 Amplify 框架似乎很容易实现,但我找不到 iOS 或 Android 的等价物。

如何使用 Amplify 框架实现这一目标?

谢谢。

4

3 回答 3

1

在 iOS 项目中开发集成 API 网关时,我遇到了和你一样的问题。实际上,我为此提出了 PR。看一看。. 不幸的是,他们关闭了那个 PR。但无论如何,我开始为我的项目使用自己的fork。它已经直播了2个月。而且我没有遇到任何问题。

希望它会有所帮助。

于 2021-03-20T10:54:31.853 回答
0

从 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所述

于 2021-06-23T03:13:40.577 回答
0

放大安卓

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)
    }
)

放大 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")
        }
    }
}
于 2021-02-18T05:00:34.120 回答