要求ペイロードの設計

必須、オプション、および書き込み専用フィールドの判別

要求ペイロードのコンテキストでは、特定のリソースの各フィールドは、以下のいずれかになります。

  • 必須 - このフィールドは、必ず含める必要があります。
  • オプション - このフィールドは、含めることも省略することもできます。
  • 読み取り専用 - このフィールドを含めることはできません。

必須フィールド

必須フィールドは要求ペイロードに必ず含めます。フィールドは、以下の理由のいずれかにより必須となることがあります。

  • そのフィールドは、関連スキーマで必須のマークが付いているため、そのスキーマを使用するすべての POST で含める必要がある。
  • そのフィールドは、関連スキーマで必須のマークが付いていないが、ClaimCenter で常に必須となる(例:基になるデータベース列が、デフォルト値なしで Null 不可能のマークが付けられる可能性があり、アプリケーションがそれに対する値を生成しない)。
  • そのフィールドは API では必須ではないが、ClaimCenter で必須の場合がある(例:機密以外のドキュメントでは作成者が必須ではないが、機密ドキュメントには必要という ClaimCenter の検証ルールがある可能性があるので、作成者フィールドが一部の場合にのみ必須となる)。

フィールドが POST で必須となるか、許可されるかどうかは、対応するデータモデルエンティティやデータベース列の必要性に必ずしも一致しません。例:

  • フィールドは、データベースで Null 不可能のマークが付いている可能性があります(したがって「必須」)。しかし、ClaimCenter では、それに対して常に値を生成します。したがって、そのフィールドは読み取り専用のマークが付き、API スキーマでは必須となりません。
  • フィールドは、オブジェクトが作成される際、データベースで Null 不可能のマークが付き(したがって「必須」)、必須である可能性があります。しかし、オブジェクトの作成後は、フィールドの値を変更できません。したがって、そのフィールドは作成には必須でも、更新では読み取り専用となります。

API でフィールドが必須であることの判別

API でフィールドが必須の場合、スキーマではフィールドの以下のプロパティを指定します。

"requiredForCreate": true

例えば、クレーム API には、特定のクレームの連絡先を作成する POST claim/{claimId}/contacts エンドポイントがあります。このエンドポイントが要求スキーマの定義に使用するデータエンベロープの 1 つが、ClaimContact スキーマです。これには以下が含まれます。

contactSubtype	string
                        x-gw-type: typekey.Contact
                        x-gw-extensions: OrderedMap { "createOnly": true,
                             "requiredForCreate": true }
dateOfBirth	   string($date)
                        x-gw-nullable: true
                        x-gw-extensions: OrderedMap { "before": "now",
                             "entitySubtype": "Person" }

contactSubtype フィールドには "requiredForCreate": true プロパティがあるのに対し、dateOfBirth フィールドにはないことに注意してください。これはつまり、API では連絡先の作成に連絡先のサブタイプが必須ですが、生年月日は不要だということです。

アプリケーションでフィールドが必須であることの判別

フィールドが API では必須ではないが、アプリケーションで必須の場合、これを識別する方法は、要求をアプリケーションに送信することのみです。必須の値が要求ペイロードから失われている場合、失われたフィールドを特定するメッセージと共に BadInputException の応答を取得します。例:

{
        "status": 400,
        "errorCode": "gw.api.rest.exceptions.BadInputException",
        "userMessage": "The 'body' field is required when creating notes"
        }

読み取り専用のフィールド

読み取り専用のフィールドは、(ユーザーまたはアプリケーションロジックのいずれかによって)アプリケーション内で設定されるフィールドで、システム API の呼び出しで設定または変更することができません。読み取り専用のフィールドは、要求スキーマの一覧に readonly: true と表示されます。この情報は、エンドポイントの[モデル] タブを使用して Swagger UI で表示できます。

例えば、これは POST /activity/{activityId}/notes エンドポイントの createDate フィールドのモデルテキストです。

createdDate	  string($date-time)
                       readOnly: true

要求ペイロードには、読み取り専用の値を含めることはできません。含めた場合、API では以下のようなエラーメッセージと共に BadInputException を返します。

"message": "Property 'createdDate' is defined as read-only and cannot be specified on inputs"

オプションのフィールド

技術的な観点では、必須でも読み取り専用でもないフィールドはすべてオプションです。こうしたフィールドは、必要に応じて含めることも、省略することもできます。

要求ペイロードの構造

単一リソースを作成する要求ペイロードの基本構造は以下のとおりです。

{
      "data":
          {
              "attributes": {
                    <field/value pairs are specified here>
                  }
          }
}

例えば、このペイロードは以下のように、備考・経緯の作成に使用できます。

{
      "data":
          {
              "attributes": {
                  "subject": "Main contact vacation",
                  "body": "Rodney is on vacation for the entire month of June. 
                          During this time, direct any questions to Sarah Jackson.",
                  "confidential": false,
                  "topic": {
                      "code": "general"
                  }
              }
          }
}

場合によっては、「空の本文」(値が指定されていない本文)を使用してオブジェクトを作成できます。この方法で作成されたオブジェクトには、デフォルト値のみが含まれます。このような場合、ペイロードには以下のように、空白の attributes セクションが含まれます。

{
      "data":
          {
              "attributes": {
               }
          }
}

要求ペイロードでのスカラー値の指定

値の形式は、要求ペイロードおよび応答ペイロードと同じです。特定のフィールドに対して、その形式を応答ペイロードで要求ペイロードの構築方法のモデルとして使用できます。

スキーマでは、スカラー値のフィールド値の種類には、type プロパティを使用してマークが付けられます。要求ペイロードで、スカラー値は以下のパターンに従います。

フィールドの値の種類 パターン 備考
文字列 "fieldName" : "value"

"firstName" : "Ray",

"id": "demo_date:12"

ID は文字列とみなされます。
整数 "fieldName" : value "numDaysInRatedTerm": 180 他の種類のスカラー値とは異なり、整数、ブール値、および Null の値は引用符を付けずに表します。
小数 "fieldName" : "value" "speed": "60.​0"
日付 "fieldName" : "value" "dateReported": "2020-04-09"

以下の形式で表します。

YYYY-MM-DD

日時 "fieldName" : "value" "createdDate": "2020-04-09T18:24:57.​256Z"

以下の形式で表します。

YYYY-MM-DDT

hh:mm:ss.fffZ

ここで T と Z はリテラル値です。

Boolean "fieldName" : value "confidential": false 他の種類のスカラー値とは異なり、整数、ブール値、および Null の値は引用符を付けずに表します。

ID

ID の値は ClaimCenter によってアサインされます。したがって、作成中のオブジェクトの ID は指定できません。ただし、新規オブジェクトに関連する既存オブジェクトを指定する際、ID を指定できます。

要求ペイロードでのオブジェクトの指定

オブジェクトを指定する構文は以下のとおりです。

"objectName": {
      "field1": value_or_"value",
      "field2": value_or_"value",
      ...
      }

例:

"assignedUser": {
      "displayName": "Andy Applegate",
      "isActive": true
      }

各オブジェクトのフィールド値には、フィールドのデータ型に基づいて、引用符を使用する値と使用しない値があります。例えば、assignedUser には displayName フィールドがあります。このフィールドの値は文字列なので、値には引用符を付けます。assignedUserisActive フィールドもあった場合、これはブール値なので、この値には引用符を付けずに true または false のいずれかで指定します。

タイプキーと金額の値は、オブジェクトで表します。これらはそれぞれ、標準のパターンを使用して指定されます。

タイプキー

タイプキーは以下の形式を使用します。

"field": {
    "code": "value"
}

例:

"priority": {
    "code": "urgent"
}

タイプキーには name フィールドもあり、このフィールドは応答に含まれます。しかし、name フィールドは必須ではありません。要求スキーマに含めると、無視されます。

金額

金額には以下の形式を使用します。

"field": {
    "amount": "amountValue",
    "currency": "currencyCode"
}

例:

"transactionAmount": {
    "amount": "500.00",
    "currency": "usd"
}

(システム API で、このデータ型は MonetaryAmount と呼ばれますが、 ClaimCenter では、これらの値は実際には CurrencyAmount データ型を使用して保存されることに注意してください。)

関連オブジェクト

要求ペイロードで関連オブジェクトを指定する方法の詳細については、要求包含を参照してください。

値とオブジェクトの Null 設定

フィールドの値を Null に設定するには、以下の構文を使用します。

フィールドの値の種類 パターン 備考
値を Null に設定するフィールド "fieldName" : null "middleName": null 任意のスカラー値を Null に設定可能。引用符なしで表記。

オブジェクトの値を Null に設定するには、オブジェクトフィールドレベルで Null を指定します。例えば、ユーザーは自宅の電話番号を任意で指定できます。以下は、自宅の電話番号が Null であることを明示的に指定しています。

"homePhone": null

タイプキーを Null に設定するには、タイプキーフィールドレベルで Null を指定します(コードレベルで Null を指定しないでください)。例えば、以下では、ドキュメントの language フィールドを Null に設定します。

"language": null

金額や通貨を Null に設定するには、フィールドレベルで Null を指定します (金額や通貨レベルで Null を指定しないでください)。例えば、以下では transactionAmount フィールドを Null に設定します。

"transactionAmount": null