RFC 8259 クイズ

相互運用できるJSONの解析と生成

0 / 0

一次資料

JSON syntaxとapplication schemaを分け、parser、signature、gateway、authorizationをまたぐrepresentation差を追います。Section番号はRFC 8259を指します。

Q1: RFC 8259 Sections 2 and 3とapplication schemaを分けた処理はどれか

単一選択

A2A endpointの契約は、top-level objectにtaskIdactionを要求する。受信bodyはJSON numberの42であり、汎用JSON parserは正常にparseした。

Bが適切です。RFC 8259 Sections 2 and 3では、JSON textはobjectやarrayに限らず、serializeされた任意のJSON valueです。したがって42はJSON構文としてvalidです。一方、A2A endpointはapplication contractとしてtop-level objectと必須memberを要求できます。この場合はJSON parserの失敗と偽らず、message schemaを満たさない入力として拒否します。parserの成功はapplication messageの妥当性を保証せず、RFC 8259は暗黙のobject変換も定義していません。

Q2: RFC 8259だけからnullとmember欠落の意味を同一視できるか

単一選択

grant更新APIで、client Aはdelegateを省略し、client Bは"delegate":nullを送る。authorization serviceは省略を「現在値を維持」、nullを「委任を解除」と解釈する。

Cが適切です。RFC 8259 Sections 3 and 4はnull literalとobject memberの構文を定義しますが、memberの欠落とnullをapplication上同一とする規則は定義しません。更新なしと明示的解除を区別する設計は成立しますが、schema、validation、authorizationの全componentで同じ意味を使う必要があります。parserによる暗黙補完はRFC 8259の動作ではなく、契約を隠してcomponent間の解釈差を生む可能性があります。

Q3: RFC 8259 Section 4に照らしたoperation表現の修正はどれか

単一選択

gatewayとreplay workerはobjectの「最初のmember名」をoperationとして扱う。clientは{"cancel":true,"taskId":"t1"}を送るが、loggerはmemberをalphabetical orderで再serializeし、別のlibraryは呼出側へorderを公開しない。

Cが適切です。RFC 8259 Sections 1 and 4はobjectをunordered collectionとして説明し、member orderをcalling softwareへ見せるかはlibrary間で異なるとしています。署名は特定のbyte sequenceを保護できますが、全parser APIへ同じ順序の公開を要求するものではありません。operationは明示memberとして表し、順序そのものが意味を持つdataにはordered sequenceであるarrayを使います。全componentで独自sort規則を共有する案は、RFC 8259にない追加contractを増やします。

Q4: RFC 8259 Section 5とtask batch schemaを両立する処理はどれか

単一選択

batch endpointはtask objectのarrayを要求する。入力は[{"id":"t1"},null,"retry"]であり、JSON parserはarrayとして正常にparseした。

Bが適切です。RFC 8259 Section 5はarray elementへ同一type要件を課さないため、このbodyはJSON構文としてvalidです。しかしapplication profileは「task objectのarray」という狭いschemaを定義できます。各elementを利用前に検証し、batch全体を拒否するかelement単位のerrorを返すかもAPI contractで決めます。構文上の許容を業務上の受理へ直結させたり、規定のない暗黙変換を行ったりしてはいけません。

Q5: RFC 8259 Sections 6, 9, and 10に沿った修正はどれか

単一選択

telemetry clientが{"latency":NaN}を生成する。gatewayのpermissive parserは受理して署名結果とともに転送するが、backendのstrict parserは拒否する。非有限値を伝える必要性は未定義である。

Dが適切です。RFC 8259 Section 6はNaNInfinityをnumber grammarから除外します。Section 9はparserがnon-JSON extensionを受理することを許しますが、Section 10はgeneratorの出力へJSON grammarへの厳密な適合を要求します。したがって一つのpermissive parserが受理した事実やbyteへの署名は、bare NaNをinteroperable JSONにしません。非有限値が必要なら、null、string、状態member、member省略などのどれを使うかとその意味をapplication schemaで定義します。

Q6: runtime間のidentifier roundingを避ける表現はどれ?

単一選択

Agent Cardは整数identifier 9007199254740993を使う。binary64ベースのgatewayとarbitrary-precision backendが、parseと再serializationを通じて同じidentifierを正確に保つ必要がある。

A: exponent notationを使ってもparserへarbitrary-precision semanticsは与えられません。B: JSONにはcomment syntaxがなく、commentがあってもnumeric precisionは変わりません。C: RFC 8259 Section 6が示すbinary64の相互運用可能なexact-integer rangeから、この値は外れます。stringならnumeric roundingを避けられ、application profileがidentifier syntaxとequality ruleを定義できます。

Q7: RFC 8259 Sections 8.1 and 11を踏まえた受信profileはどれか

単一選択

独立した組織間のA2A requestで、senderはBOM付きUTF-16 JSONを生成し、Content-Type: application/json; charset=utf-16を付け、送信byteへ署名する。gatewayはUTF-8へtranscodeした後、その変換後byteをsender署名の検証対象にしている。

Aが適切です。RFC 8259 Section 8.1はclosed ecosystem外のJSON textへUTF-8を要求し、generatorによるBOM追加を禁止します。parserは受信BOMを無視してもよいだけで、必須ではありません。Section 11のapplication/json登録にはcharset parameterが定義されていません。さらにRFC 8259は署名canonicalizationを定義しないため、transcode後のbyteをoriginal byteへの署名と同一視できません。profileはwire encodingを先に固定し、署名がexact received bytesを覆うのか、別仕様で定義したcanonical representationを覆うのかを明示する必要があります。

Q8: RFC 8259 Section 8.3に沿ってname-filter bypassを防ぐ設計はどれか

単一選択

gatewayのfilterはraw JSON tokenが"admin_role"と完全一致する場合だけmemberを拒否する。application parserは"\u0061dmin_role"をdecodeし、同じadmin_role memberとしてauthorization logicへ渡す。

Dが適切です。RFC 8259 Section 8.3は、escapeを変換せずにstringを比較すると、同じstring valueを異なるものと誤判定し得ると説明します。filterとauthorization serviceがraw spellingとdecoded nameを別々に見る構成はsecurity boundaryを分断します。inputを一度parseし、decode後のUnicode code-unit sequenceでnameを比較し、同じvalidated representationを後続判断へ渡します。RFC 8259はrepresentation-independentな署名形式までは定義しないため、それが必要なら別途canonicalization仕様を選ぶ必要があります。

Q9: RFC 8259 Section 8.2を入力profileへ適用した修正はどれか

単一選択

Agent Cardのdisplay nameにG clefを表すsurrogate pair \uD834\uDD1Eがある。UTF-16 middlewareが1 code unitで切断し、JSONへlone surrogate \uD834を書き戻した。gateway、logger、policy serviceはこのstringのlengthとvalueを異なる方法で扱う。

Cが適切です。RFC 8259 Section 8.2は、JSONのABNFがlone surrogateのようなUnicode characterを表せないbit sequenceも許してしまうことを説明し、その受信結果はlengthの不一致からfatal runtime exceptionまで予測不能になり得ると警告します。RFCは全receiverへ共通のreplacement procedureを要求していません。application profileは相互運用可能なUnicode scalar sequenceへ入力を限定し、logging、policy、署名後処理へ渡す前にlone surrogateを拒否できます。byte署名は改変を検出しても、複数runtimeのdecode結果を同一にはしません。

Q10: このresource boundaryへ必要なreceiver修正はどれ?

単一選択

未認証peerが50 MiB、10,000階層のJSON documentを送る。serviceはapplication modelをすべて構築した後で、設定済みの1 MiB・64階層policyを確認している。

A: 遅いcheckではhostile inputが先にparserとmodel-building resourceを消費します。B: RFC 8259 Section 9はtext sizeとmaximum nesting depthへのlimitを許します。profileが宣言したlimitを高コスト処理より前に適用すれば、このboundaryを保護できます。C: parserはlimitを設定できます。D: grammar conformanceはresource consumptionの許容を意味しません。1 MiBと64階層という値はapplication policyであり、RFC 8259がmandateする値ではありません。

Q11: RFC 8259から正当化できるdesign review conclusionはどれか

単一選択

signed A2A grantに`{"role":"reader","role":"admin"}`が含まれます. signature verifierは最初の`role`を公開し, authorization serviceのJSON libraryは最後を公開します. 両者は同じsigned byteを正常に処理します.

RFC 8259 Section 4はobject nameをuniqueにすべきとし, interoperability上の理由を説明します. nameが重複すると, 最初, 最後, 全valueのいずれを返すか, objectをrejectするかがimplementationごとに異なります. byteへのsignatureは, parserが同じname-value mappingを導くことを保証しません. authorization fieldでこの不一致が起きるとsecurity boundaryになります. A2A profileはbase JSON guidanceを強化してunique nameを要求し, duplicateをsignature resultやauthorization dataが別parserへ流れる前にrejectできます. その後は同じvalidated representationを全decision pointへ渡します. Section 4はMUSTではなくSHOULDなので, RFC 8259だけからduplicate-name JSON textを常にsyntax非適合とは断定できません. このscenarioでのmandatory rejectionはapplication security profileとunambiguous interpretationの必要性から導かれ, RFCが示すinteroperability riskに基づきます.