11.7.3. Quarkus 関数の呼び出しについて
CloudEvents に応答する Quarkus プロジェクトや、簡単な HTTP 要求に応答する Quarkus プロジェクトを作成できます。Knative の CloudEvents は HTTP 経由で POST 要求として転送されるため、いずれかの関数タイプは受信 HTTP 要求をリッスンして応答します。
受信要求が受信されると、Quarkus 関数は使用可能なタイプのインスタンスと合わせて呼び出されます。
| 呼び出しメソッド | インスタンスに含まれるデータタイプ | データの例 |
|---|---|---|
| HTTP POST 要求 | 要求のボディーに含まれる JSON オブジェクト |
|
| HTTP GET 要求 | クエリー文字列のデータ |
|
|
|
|
|
以下の例は、以前の表に記載されている customerId および productId の購入データを受信して処理する関数です。
Quarkus 関数の例
public class Functions {
@Funq
public void processPurchase(Purchase purchase) {
// process the purchase
}
}
購入データが含まれる、該当の Purchase JavaBean クラスは以下のようになります。
クラスの例
public class Purchase {
private long customerId;
private long productId;
// getters and setters
}
11.7.3.1. StorageLocation の例 リンクのコピーリンクがクリップボードにコピーされました!
以下のコード例は、withBeans、withCloudEvent、および withBinary の 3 つの関数を定義します。
例
import io.quarkus.funqy.Funq;
import io.quarkus.funqy.knative.events.CloudEvent;
public class Input {
private String message;
// getters and setters
}
public class Output {
private String message;
// getters and setters
}
public class Functions {
@Funq
public Output withBeans(Input in) {
// function body
}
@Funq
public CloudEvent<Output> withCloudEvent(CloudEvent<Input> in) {
// function body
}
@Funq
public void withBinary(byte[] in) {
// function body
}
}
Functions クラスの withBeans 機能は、以下にで呼び出すことができます。
JSON ボディーが含まれる HTTP POST 要求:
$ curl "http://localhost:8080/withBeans" -X POST \ -H "Content-Type: application/json" \ -d '{"message": "Hello there."}'クエリーパラメーターが含まれる HTTP GET 要求:
$ curl "http://localhost:8080/withBeans?message=Hello%20there." -X GETバイナリーエンコーディングの
CloudEventオブジェクト:$ curl "http://localhost:8080/" -X POST \ -H "Content-Type: application/json" \ -H "Ce-SpecVersion: 1.0" \ -H "Ce-Type: withBeans" \ -H "Ce-Source: cURL" \ -H "Ce-Id: 42" \ -d '{"message": "Hello there."}'構造化されたエンコーディングでの
CloudEventオブジェクト:$ curl http://localhost:8080/ \ -H "Content-Type: application/cloudevents+json" \ -d '{ "data": {"message":"Hello there."}, "datacontenttype": "application/json", "id": "42", "source": "curl", "type": "withBeans", "specversion": "1.0"}'
Functions クラスの withCloudEvent 機能は、withBeans 関数 と同様に CloudEvent オブジェクトを使用して呼び出すことができます。ただし、withBeans とは異なり、withCloudEvent はプレーン HTTP 要求で呼び出すことはできません。
Functions クラスの withBinary 関数は、以下にで呼び出すことができます。
バイナリーエンコーディングの
CloudEventオブジェクト:$ curl "http://localhost:8080/" -X POST \ -H "Content-Type: application/octet-stream" \ -H "Ce-SpecVersion: 1.0"\ -H "Ce-Type: withBinary" \ -H "Ce-Source: cURL" \ -H "Ce-Id: 42" \ --data-binary '@img.jpg'構造化されたエンコーディングでの
CloudEventオブジェクト:$ curl http://localhost:8080/ \ -H "Content-Type: application/cloudevents+json" \ -d "{ \"data_base64\": \"$(base64 --wrap=0 img.jpg)\", \"datacontenttype\": \"application/octet-stream\", \"id\": \"42\", \"source\": \"curl\", \"type\": \"withBinary\", \"specversion\": \"1.0\"}"