7

理想的には、JAX-RS のようなもの (呼び出したいサービスを記述するために注釈を使用) を探していますが、(JAX-RS ではなく) 他のテクノロジを使用して実装された REST サービスを呼び出すことができます。なにか提案を?

4

5 に答える 5

9

JAX-RS (JSR311) はクライアント API を定義していませんが、JerseyRESTeasyApache CXFなど、ほとんどの JAX-RS 実装にはクライアント API があります。Restlet フレームワークには、クライアント サポートと、別のHTTP クライアント拡張機能もあります。

これらは REST に特化したライブラリ/フレームワークであるため、これらを調べることをお勧めします。

于 2009-05-31T10:44:01.647 に答える
7

あなたは、HttpClient よりも「より高いレベルの何かを期待している」とコメントに書きました。Restletは完璧なようですね。RESTful Web アプリケーションを実装および使用するための高レベル API を提供し、低レベル実装用のプラグアンドプレイ アダプターを備えています。

たとえば、Restlet 1.1 を使用して Web フォームをリソースに POST するには:

Client client = new Client(Protocol.HTTP);

Form form = new Form();
form.add("foo", "bar");
form.add("abc", "123");

Response response = client.post("http://host/path/to/resource", form.getWebRepresentation())

if (response.getStatus().isError()) {
    // deal with the error
    return;
}

if (response.isEntityAvailable()) {
    System.out.println(response.getEntity().getText());
}

リクエストにさらにオプションを設定する必要がある場合は、Request オブジェクトを使用できます。

Form form = new Form();
form.add("foo", "bar");
form.add("abc", "123");

Request request = new Request(Method.POST, "http://host/path/to/resource");

request.setEntity(form.getWebRepresentation());

request.setReferrerRef("http://host/path/to/referrer");

Response response = client.handle(request);

チッ!

于 2009-06-02T01:39:56.167 に答える
2

WADL プロジェクトをご覧になることをお勧めします。WADL は REST に対応し、WSDLは SOAP に対応します。

まず、WADL を使用して REST インターフェースを定義する必要があります。次に、wadl2java ツールを実行して、REST 呼び出し用のクライアント スタブを生成できます。

Web サービスの WADL を取得したら、サーバー側のスタブの生成、ドキュメントの生成など、他のことも行うツールを実装できます。

于 2009-05-28T22:57:28.637 に答える
1

ほとんどの場合、Apache のHttpClient ( http://hc.apache.org/httpcomponents-client-ga/を参照)。

于 2009-05-28T22:45:09.690 に答える
0

Gandalf と Darrel Miller が言ったように、HttpClient.

HTTP パラメータから XML を構築する必要はありません。XML は、2 つの別個のシステム間のインターフェイスにすぎません。HttpClient を使用すると、Java で String 値を自由に使用できるようになります。そこから XML に戻る必要はありません。

この時点で別のシステムに送信するために XML に戻る場合は、別のシステムと通信する前に、値を HTTP パラメーターからドメイン/アプリ ロジックに戻すことを検討する必要があります。これは、システム間通信からアプリケーション ロジックを適切に分離するために必要です。

于 2009-06-24T13:43:41.667 に答える