Я пытаюсь вызвать get api, который находится в aws api gateway
через rest-assured
Я могу подписать запрос и сделать звонок. Но чтобы подписать запрос, мне нужно передать полный URL-адрес в AWS, чтобы сгенерировать заголовок авторизации.
Например. Если я собираюсь получить доступ к конечной точке https://my-aws-api.com/basepath/v1/request/123
, мне нужно подписать запрос через AWSSigner, которому для этого требуется полная конечная точка.
Мой текущий подход
String baseURI="https://my-aws-api.com";
String basePath="basepath/v1";
String requestPath="request/123";
String endpoint=baseURI+"/"+basePath+"/"+requestPath;
Map<String,String> signedHeaders= aws4sign(endpoint,defaultHeaders);
given()
.log().ifValidationFails()
.headers(signedHeaders)
.when()
.get(endpoint)
.then()
.log().ifValidationFails()
.statusCode(200);
Если я это сделаю, я не смогу использовать RestAssured baseURI
, basePath
и path params
Я хочу получить к нему доступ как
RestAssured.baseURI="https://my-aws-api.com";
RestAssured.basePath="basepath/v1";
given()
.log().ifValidationFails()
.pathParam("reqID", "123")
.when()
.get("request/{reqID}")
.then()
.log().ifValidationFails()
.statusCode(200);
AwsSigner
public static Map<String, String> aws4Sign(String endpoint, Map<String, String> headers) throws URISyntaxException {
String serviceName = "execute-api";
AWS4Signer aws4Signer = new AWS4Signer();
aws4Signer.setRegionName(EU_WEST_1.getName());
aws4Signer.setServiceName(serviceName);
DefaultRequest defaultRequest = new DefaultRequest(serviceName);
URI uri = new URI(endpoint);
defaultRequest.setEndpoint(new URI(uri.getScheme(), null, uri.getHost(), uri.getPort(), "", "", ""));
defaultRequest.setHttpMethod(HttpMethodName.GET);
defaultRequest.setResourcePath(uri.getRawPath());
defaultRequest.setHeaders(headers);
aws4Signer.sign(defaultRequest, DefaultAWSCredentialsProviderChain.getInstance().getCredentials());
return defaultRequest.getHeaders();
}
Так что мой вопрос есть, я могу перехватить запрос RestAssured до того, как он сделает вызов, чтобы я мог получить полностью сгенерированную конечную точку и добавить подписанный заголовок aws к вызову.