コンテンツにスキップ

API

以下の仕様は実装からビルド時に生成している。サーバの実際の振る舞いと食い違うことが ない。

稼働中のインスタンスも同じものを出す。Swagger UI は /api/docs、ReDoc は /api/redoc、生の文書は /api/openapi.json

役割ごとに開く口

minter に解決の口は無く、resolver に採番の口も無い。 別プロセスなので別々に スケールでき、resolver は読み取り専用のレプリカに向けられる。

スキーマからは読み取れないこと

採番は、頼めば冪等になる。 request_id を付けて送れば、同じ要求の再送には 前回と同じ ARK が返り、新しくは採らない。万オーダーの投入では途中で接続が切れる ほうが普通で、控えが無いまま再送すると誰も指していない識別子が増える——ARK は それを回収できない。

リクエストの shoulder は範囲を広げない。 省略すれば組織の既定が使われ、名指した 場合に問われるのは「それが自分の範囲の内側かどうか」だけ。

委譲された shoulder は 307 を返す。プロキシはしない。 その名前空間の採番が外で 行われるなら、行き先を教える。代理で呼ばないのは、応答が失われたときに 向こうでは採番されたがこちらは知らない ARK が生まれるから。

一括操作は部分適用しない。 一括更新の 1 件でも欠けるか範囲外なら、全体が失敗する。 arklet は順序不定の問い合わせ結果を入力と zip しており、別のレコードの値を書き込み うるバグがあった。

解決

解決は OpenAPI では十分に表せない——1 本の経路で、接尾によって振る舞いが変わるため。

要求 応答
/ark:/99999/x9abc 302 で対象へ。行き先が無ければ記述を返す
/ark:/99999/x9abc/page/3 302対象/page/3 へ。suffix passthrough。子に識別子は要らない
/ark:/99999/x9abc? ERC/ANVL の kernel(who / what / when / where)
/ark:/99999/x9abc?? 上に加えて永続性宣言
/ark:/99999/x9abc?info 同じ内容を人に向けて
/ark:/99999/x9abc?json 同じ内容を機械に向けて
/ark:/12345/…(未知 NAAN) 302 でグローバルリゾルバへ
/.well-known/ark このリゾルバが何を預かっているか。採番を外に委ねているならその案内先

裸の ? は、プロトコルの層でクエリ文字列なしと区別できない(ASGI でも同じ)。 前段が生の URI を渡せるなら ARKHE_RAW_URI_HEADER を設定する。