RestEasy:如何发送带有参数和 api 密钥的简单 POST 请求

RestEasy : How to send an easy POST request with parameters and api key

我是初学者,对 Resteasy 有点迷茫

我想发送一个带有 URL 的 post 请求,类似于:http://myurl.com/options?value=3name=picture

String myValue = "3";
String myName = "picture";
String key = "topsecret";

我不太确定接下来会发生什么。我看过几个教程类(我不是很清楚)和另一种类似于此的方法

final MultivaluedMap<String, Object> queryParams = new MultivaluedMapImpl<>();
queryParams.add("value", myValue);
queryParams.add("name", myPicture);
final ResteasyClient client = new ResteasyClientBuilder().build();
final ResteasyWebTarget target = client.target(url).queryParams(queryParams);;
final Builder builder = target.request();

当我写作时,我有很多警告。这是正确的方法吗? API 键呢?

首先,您必须检查要使用的 API 的文档,了解如何将 API 密钥发送到服务器。 并非所有 API 都遵循相同的方法。

出于示例目的,我们假设 API 密钥必须在 X-Api-Key header 中发送。这是一个非标准,我编造它只是为了演示如何使用客户端API。

所以你可以拥有以下内容:

// Create a client
Client client = ClientBuilder.newClient();

// Define a target
WebTarget target = client.target("http://myurl.com/options")
                         .queryParam("value", "3")
                         .queryParam("name", "picture");

// Perform a request to the target
Response response = target.request().header("X-Api-Key", "topsecret")
                          .post(Entity.text(""));

// Process the response
// This part is up to you

// Close the response
response.close();

// Close the client
client.close();

以上代码使用了JAX-RSAPI,由RESTEasy实现。您最好尽可能使用 Client instead of ResteasyClient 以确保与其他实现的可移植性。

以上代码还假定您要在请求负载中发送一个空文本相应修改。

Response 个包含 un-consumed 实体输入流的实例 应该关闭 。这对于仅处理响应 header 和状态代码, 忽略响应实体 .

的场景很典型

超出问题的范围,请记住 Client instances are heavy-weight objects that manage the underlying client-side communication infrastructure. Hence initialization as well as disposal of a Client 实例可能是一个相当昂贵的操作。

documentation advises to create only a small number of Client instances and reuse them when possible. It also states that Client 实例必须在处理前正确关闭 以避免资源泄漏。