4Aモデル(AI Agent Application Architecture)は、LLMベースのAIエージェントアプリケーションを迅速かつ拡張性高く構築するためのリファレンスアーキテクチャです。以下の6つのレイヤーで構成され、エンタープライズ用途に対応可能なセキュリティ・柔軟性・観測性を備えています:

User Interface Layer
Gateway Layer
Orchestrator / Reasoning Layer
MCP Server / Tool Layer
Data / API Layer
Context / Memory Layer
JSON Schema Validation: A Vocabulary for Structural Validation of JSON
キーワード
型 | Keyword | 用途 | Value型 | Schema Sample |
すべて
|
type |
型定義 |
string or array |
"type": "object"
"type": "string"
"type": "number"
"type": ["string", "number"]
|
enum |
列挙定義 |
array |
"enum": ["東京", "大阪", "名古屋"]
|
const |
定数定義 |
すべて |
"const": 5
"const": "日本"
|
title |
タイトル |
string |
"title": "sample api schema" |
description |
概要 |
string |
"description": "sample api schema" |
default |
デフォルト |
すべて |
"default" : "default value"
|
readOnly |
読出しのみ |
boolean |
"readOnly": true |
writeOnly |
書込みのみ |
boolean |
"writeOnly": true |
examples |
サンプル |
array |
"samples": ["abc", "def", "ghi"] |
数字 number & integer
|
multipleOf |
倍数 |
number |
"multipleOf": 5
"multipleOf": 2.5
|
maximum |
最大値 <= |
number |
"maximum": 100 |
exclusiveMaximum |
最大値 < |
number |
"exclusiveMaximum": 100 |
minimum |
最小値 >= |
number |
"minimum": 100 |
exclusiveMinimum |
最小値 > |
number |
"exclusiveMinimum": 100 |
String
|
maxLength |
最長 |
non-negative integer |
"maxLength": 64 |
minLength |
最短 |
non-negative integer |
"minLength": 4 |
pattern |
正規表現よる文字列定義 |
string |
"pattern": "[abc]+" |
Array
|
items |
配列要素のスキーマ定義 |
JSON schema or array of JSON schema |
"items": { "type": "integer" } |
additionalItems |
拡張要素のスキーマ定義 |
JSON schema |
"additionalItems": { "type": "string" } |
maxItems |
最大サイズ |
non-negative integer |
"maxItems": 10 |
minItems |
最小サイズ |
non-negative integer |
"minItems": 10 |
uniqueItems |
同じ値の要素が許可できるか |
boolean |
"uniqueItems": true |
contains |
必須要素タイプ |
JSON schema |
"contains": { "type": "integer" } |
Object
|
maxProperties |
属性数最大値 |
non-negative integer |
"maxProperties": 5 |
minProperties |
属性数最小値 |
non-negative integer |
"minProperties": 2 |
required |
必須属性 |
array |
"required": ["name", "email"]
|
properties |
属性定義 |
object |
"properties": { "name": { "type": "string" }, "id": { "type": "number","minimum": 2 } "enum": ["man", "woman", "others"] }
|
patternProperties |
正規表現よる属性定義 |
object |
"patternProperties": { "^class.*$": { "type": "string" }, "^grade.*$": { "type": "number" } }
|
additionalProperties |
拡張属性のスキーマ定義 |
JSON schema |
"additionalProperties": { "type": "string" } |
dependencies |
依存関係 |
object |
"dependencies": { "credit_card": { "properties": "billing_address": { "type": "string" } }, "required": ["billing_address"] } }
|
propertyNames |
属性名 |
JSON schema |
"propertyNames": { "format": "email" } |
条件キーワード
|
if/then/else |
条件判定よるスキーマ定義 |
JSON Schema |
{ "if": { "properties": { "power": { "minimum": 9000 } } }, "then": { "required": [ "disbelief" ] }, "else": { "required": [ "confidence" ] } }
{ "type": "integer", "minimum": 1, "maximum": 1000, "if": { "minimum": 100 }, "then": { "multipleOf": 100 }, "else": { "if": { "minimum": 10 }, "then": { "multipleOf": 10 } } }
|
|
allOf |
複数条件 |
array |
"allOf": [ { "maximum": 3 }, { "type": "integer" } ]
|
|
anyOf |
任意条件 |
array |
"anyOf": [ { "maximum": 3 }, { "type": "integer" } ]
|
|
oneOf |
うちの一つ |
array |
"oneOf": [ { "maximum": 3 }, { "type": "integer" } ]
|
|
not |
でない |
JSON Schema |
"not": { "type": "string" } |
Encoding |
contentEncoding |
エンコード(rfc2945) |
string |
"contentEncoding": "base64" |
contentMediaType |
メデイア(rfc2046) |
string |
"contentMediaType": "text/plain; charset=utf8"
"contentMediaType": "text/html"
"contentMediaType": "image/png"
|
再利用 |
definitions
$ref
|
定義済みスキーマの再利用 |
object |
{ "type": "array", "items": { "$ref": "#/definitions/positiveInteger" }, "definitions": { "positiveInteger": { "type": "integer", "exclusiveMinimum": 0 } } }
|
「キャッシュレス・ビジョン」「クレジットカードデータ利用に係るAPIガイドライン」を策定しました
経済産業省は、クレジットカード会社のAPI※連携促進に向けた具体策等を検討する「クレジットカードデータ利用に係るAPI連携に関する検討会」を昨年3月に立ち上げました。
また、昨年11月からは、近年の支払い手段の多様化を踏まえて検討対象を拡大し、キャッシュレス推進のための課題と今後の方向性について議論を行い、
今般、「キャッシュレス・ビジョン」及び「クレジットカードデータ利用に係るAPIガイドライン」を策定しました。
※API(Application Programming Interface)とは、プログラムがその機能を他のプログラムから利用できるようにするためのインターフェイスのこと。
例えば、カード会社以外の者がカード会社のシステムの機能を利用できるようにするための、システム側の接続口を指す。
クレジットカードデータ利用に係るガイドライン(PDF形式:1,267KB)を読みました。
ちょうど先週サービス化(API化)の本質はソフトウェア産業化を書いていたから、
このガイドラインの発表が自分の見解を証明するようなものです。
なお、十数年前から社内API開発ガイドラインを担当した人間としては大変興味深い資料ですね。
面白い記事を見つけました。
What is The Micro API Design Pattern?
The Micro API Design Pattern
PHP Micro API Engine
要注意のは、ここが言ってるのは、Micro APIデザインパターンのことで、スキーマのことではありません。
micro-api.orgがJSON-LDベースで、hypermediaリンクを促進するために作ったスキーマがありますが、名前が同じですからちょっと混乱しやすい。
There is No U in CRUD
API設計時にCRUD(Create、Read、Update、Delete)を捨てて、ドメイン駆動設計しましょうというアマゾンの方の話です。
POST /account - open a new account.
PUT /account//close - close an existing account.
PUT /account//debit - remove money from an account.
PUT /account//credit - add money to an account.
GET /account/ - load single account by its account id
GET /account//transactions - list transaction history for an account.
GET /accounts/query/customerId/ - list accounts for the given customer id.
MuleSoftのホワイトペーパーですが、APIビジネス成功の秘密は下記の4点があります。
- Design for a great user experience
- Optimize for a particular use case
- Provide easy access
- Build a community