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\"}"