在我的iOS项目中,我需要实现AWS,就像我在该项目的Android版本中所做的那样,如果可能的话,可以使用而不是Cocoapods。
由于SPM似乎还没有可用,所以我尝试了佐藤,这允许我使用SPM实现AWS。
下面是我在我的安卓项目中所做的工作,我想在iOS上复制它:
AWSInterface接口,其中我的所有api端点都是:@Service(endpoint = "https://abcde12345.execute-api.eu-central-1.amazonaws.com/dev")
interface AWSInterface
{
@Operation(path = "/api-demo", method = "POST")
fun apiDemo(
@Parameter(name = "Content-Type", location = "header") contentType: String,
body: ApiDemoModel): RetourStatutWS
}ApiDemoModel,非常简单:class ApiDemoModel(val code: String)AWSInterfaceHolder类,因此我将能够调用apis:class AWSInterfaceHolder {
var awsInterface: AWSInterface = ApiClientFactory()
.credentialsProvider(AWSMobileClient.getInstance())
.clientConfiguration(ClientConfiguration().withConnectionTimeout(30000))
.build(AWSInterface::class.java)
}AWSMobileClient,并调用我的api:AWSMobileClient.getInstance().initialize(
applicationContext,
object : Callback<UserStateDetails> {
override fun onResult(result: UserStateDetails?) {
// AWSMobileClient is successfully initialized, I can call my api:
val awsInterfaceHolder = AWSInterfaceHolder()
awsInterfaceHolder.awsInterface.apiDemo(
"application/json",
ApiDemoModel("123456"))
}
override fun onError(e: Exception?) {
e.printStackTrace()
}
}如果可能的话,如何对我的iOS Swift项目进行同样的操作,因为默认的AWS还不能用于佐藤?
谢谢。
发布于 2021-02-03 14:53:16
Soto没有任何用于APIGateway的代码生成,但是如果您希望对APIGateway REST接口的请求签名,则可以执行以下操作。代码使用的是快速服务器AsyncHTTPClient,但是将signHeaders的结果转换为URLRequest以便与URLSession一起使用应该是非常容易的。
import SotoSignerV4
func apiGatewayExecute(
url: URL,
method: HTTPMethod,
headers: HTTPHeaders,
body: ByteBuffer? = nil
) -> EventLoopFuture<HTTPClient.Response> {
let credentials: Credential = StaticCredential(
accessKeyId: "_MYACCESSKEY_",
secretAccessKey: "_MYSECRETACCESSKEY_"
)
let signer = AWSSigner(credentials: credentials, name: "execute-api", region: "us-east-1")
// clean up URL
let processedURL = signer.processURL(url: url)!
let signedHeaders = signer.signHeaders(
url: processedURL,
method: method,
headers: headers,
body: body.map { .byteBuffer($0) }
)
let request = try! HTTPClient.Request(
url: processedURL,
method: method,
headers: signedHeaders,
body: body.map { .byteBuffer($0) }
)
return httpClient.execute(request: request, logger: logger)
}https://stackoverflow.com/questions/66009590
复制相似问题