5. データ構造

5.1. 概要

_images/class-diagram.png

5.2. API

API は Swagger 2.0 (OpenAPI 2.0)仕様 JSON または YAML で定義する。

5.3. Operation

Swagger内のOperation Objectで定義する。パス名とHTTPメソッド名で特定される。

Operation はoperationId属性を持つ。ファンクションを指定する場合、operationId は必須属性である。operationIdにはファンクションなどを識別する識別名を記載する。

  • ファンクションを指定する場合、識別名は "function:Function名" と記述する

    • "function:" は省略可能

ベンダ拡張属性として、1) トップレベル、2) Path、3) Operation のそれぞれに ACL 属性を指定できる(複数指定した場合は後者が優先)。 ACL 属性は "x-acl" 属性に設定し、値にはAPI を実行可能なユーザID・グループ名の一覧を配列で指定する(グループ名は先頭に "g:" プレフィクスを付ける)。 ACL属性を省略した場合は、権限チェックは行われない。

例を以下に示す(この例は Operation に ACL を指定している)。

paths:
  /sayHello:
    get:
      operationId: function:sayHello
      x-acl:
        - g:authenticated

5.4. ファンクションテーブル

ファンクションテーブルは JSON または YAML 形式で定義する。 キーにファンクション名、値にファンクション定義を指定する。

{
  "{function-name-1}": { /* Function */ },
  "{function-name-2}": { /* Function */ },
  //…
}

5.5. ファンクション

ファンクション定義は JSON または YAML で定義する。code属性、handler属性、env属性を持つ。

{
  "code": { /* Code */ },
  "handler": "{handler-spec-string}",
  "env": { /* Env */ }
}

5.6. コード

コード定義は JSON または YAML で定義する。bucket属性、file属性を持つ。

{
  "bucket": "{nebula-filestorage-bucket-name}",
  "file": "{file-name}"
}

5.7. 環境

環境は JSON または YAML で定義する。spec属性、timeout属性、memorySize属性を持つ。

{
  "spec": "env-spec-string",
  "timeout": 600 /* seconds */,
  "memorySize": 128 /* mebi bytes */
}