Hello, world !

Qmonus SDKでAPI開発を体験しましょう。ここでは、Hello, world!メッセージを応答するだけのAPIを作ります。
Scenarioサービスを使って以下の定義を入力します。入力が面倒な方は、以下のyamlをGUIのアップロード機能で登録することもできます。

category: Tutorial
name: HelloWorld
uri: /tutorials/hello
method: GET
commands:
  - command: script
    kwargs:
      code: |-
        context.session.finish({"message": "Hello, world!"})
request_timeout: 60
connect_timeout: 60
routing_auto_generation_mode: true

このワークフローは、GET /tutorials/helloのHTTPリクエストを受け付けます。ワークフローは、1つのコマンドブロックのみで構成され、1行のPythonスクリプトのみが実行されます。
context.sessionは、Webセッションオブジェクトへのアクセッサです。finishメソッドは、辞書オブジェクトまたは文字列を引数として取ります。finishメソッドが呼び出されると、HTTP応答が返されます。

Note

組込みオブジェクトについて詳細を知りたい場合は、Docs » 名前空間 » リファレンス » Scenarioにおけるプログラミングを参照ください。

では、早速APIを呼び出して動作を確認しましょう。

Warning

APIのエンドポイントはご利用の環境のAPI Gatewayに合わせて指定してください。本チュートリアルでは、localhost:9099API Gatewayがlistenしている前提で記述されています。
また、本シナリオへのAPIルーティングついては、routing_auto_generation_mode=Trueによってご利用の環境にあるAPI Gatewayに自動的に登録されています。Routing Tableに本シナリオ向けのルーティングが登録されていることを確認してみてください。


curlコマンドを使用してAPIを呼び出します。正しいエンドポイントが指定されていれば以下のように200 Success応答が返却されます。

curl -i http://localhost:9099/tutorials/hello
HTTP/1.1 200 OK
Server: AXIS/Enterprise Backend Orchestration Platform
Content-Type: application/json
Date: Mon, 22 Apr 2019 23:20:05 GMT
Connection: close
Etag: "8b62459eb7dbc1885110b33c53822e180c9dd5b1"
Content-Length: 28

{"message": "Hello, world!"}


次にREPLからもcallout組込みオブジェクトを利用してAPIを呼び出してみましょう。

>>> r = await callout(path="/tutorials/hello")↵
... print(r.body)↵
... ↵
b'{"message": "Hello, world!"}'
↵
>>>


Scenario組込みオブジェクトのクラスメソッドを利用してAPIを直接実行することもできます。

>>> r = await Scenario.run("HelloWorld")↵
... print(r.body)↵
... ↵
{'message': 'Hello, world!'}
↵


Scenario組込みオブジェクトでScenarioインスタンスをロードして定義を確認したり、インスタンスメソッドで実行することもできます。

>>> s = await Scenario.load("HelloWorld")↵
... print(s)↵
... ↵
command: script
id: 693742ee64d911e9a764000c29dd8250
kwargs:
  code: 'context.session.finish({"message": "Hello, world!"})'↵
↵
>>> r = await s.run()↵
... print(r.body)↵
... ↵
{'message': 'Hello, world!'}↵
↵