事実上最後のJSON仕様「RFC 8259」と「ECMA-404 2nd Editon」公開。UTF-8エンコード必須に
RESTful APIのデータフォーマットなどで広く使われているJSON。IETFはJSON仕様「RFC 8259」を発表。従来の仕様をブラッシュアップしつつECMAの仕様との統一も実現した、事実上最後のJSON仕様になると見られる。
IETFからJSON(ジェイソン)の仕様を示した「RFC 8259」(The JavaScript Object Notation (JSON) Data Interchange Format)が公開されました。
IETFにおけるJSON仕様は、これまで「RFC 7159」が参照されていましたが、RFC 8259の公開によりRFC 7159は廃止(Obsolete)となりました。
RFC 8259は、多数の実装と十分な運用実績を積み重ねたインターネット標準「STD 90」としても参照されます。
ECMAとの統一を実現。事実上最後のJSON仕様になると見られる
JSONの仕様は、IETFとは別にECMA Internationalが策定した「ECMA-404」が存在しています。
しかしRFC 8259の公開に合わせて、IETFとECMAは両者のJSON仕様を共通化することに合意。今月東京で開催された第114回ECMA General Assemblyにおいて「ECMA-404 2nd Edition」が承認され、RFC 8259とECMA-404 2nd Editionは共通の仕様となりました。
ECMA-404 2nd Editionの第3章「Normative Reference」には、次のような一節が記されています。
If a difference is found between them, Ecma International and the IETF will work together to update both documents.
もしも両者のあいだに違いが見つかった場合、Ecma InternationalとIETFは共同で両方のドキュメントを更新します。
今後ともECMAとIETFはJSONにおいて共通仕様を維持することになります。つまり、JSON仕様はここに統一を見たわけです。
著名なITエンジニアとしてこれまでXMLやJSONなどの標準策定に深く関わり、今回のRFC 8259のオーサーも務めたTim Bray氏は、自身のブログに投稿した記事「The Last JSON Spec」(最後のJSON仕様)でRFC 8259について次のように書き、JSON仕様の最終版であるという考えを示しました。
I wouldn’t be surprised if the IETF JSON Working Group shut down forever.
もしもこれでIETF JSONワーキンググループが永遠に終了となっても、驚いたりしないだろう。
RFC 7159とRFC 8259のオーサーを務めてきたTim Bray氏のこの言葉をひっくり返すような提案が今後登場することは非常に考えにくいことです。すなわち、JSON仕様は事実上、最終的に確定したと見て間違いありません。
一方でTim Bray氏は、十分に練られたJSON Schema言語など、まだJSONには不足している部分もあると指摘しています。
UTF-8エンコードが必須に
RFC 8259でアップデートされたJSON仕様では、文字のエンコードとして「UTF-8」が必須となりました。
RFC 8259の第8章「String and Character Issues」の「8.1. Character Encoding」で、次のような記述が加わっています。
JSON text exchanged between systems that are not part of a closed ecosystem MUST be encoded using UTF-8 [RFC3629].
クローズドなエコシステムの一部ではないシステム同士でのJSONによるテキストの交換は「UTF-8」を用いてエンコードされなければならない。
これまでのJSON仕様ではUTF-8エンコードは要求されていませんでしたが、多数の実装でUTF-8が用いられていたことにより、これが仕様化されたとのことです。
JSON仕様の歴史を振り返る
JSONは、軽量のデータ記述フォーマットとして、さまざまなソフトウェア間でのデータ交換で広く使われている、Webにおける重要な基盤です。
JSONのこれまでの経緯を振り返りましょう。
2001年、JSONが“発見”される
もともとJSONはJavaScriptのオブジェクト表記法をベースにDouglas Crockford氏が2001年頃に“発見”し、命名したものです。
発見したというのは、JavaScriptのオブジェクト表記法は以前から存在しており、JSONはそれを利用したものであるため、Crockford氏自身が「JSONはそれ以前から存在しており、私は発見しただけだ」と主張しているためです。
2002年、json.org公開
Crockford氏は2002年にWebサイト「json.org」を公開。JSONの基本的な仕様と記述法が広く知られることになります。
2006年、JSONにとって最初のRFC
2006年7月、Crockford氏がオーサーとなり、JSONにとって最初のRFCである「RFC 4627」がIETFから公開されます。
2013年、JSONがECMA標準に
2011年6月に発表されたECMAScript 5.1の仕様書には、JSONの文法を手短に解説したセクション「ECMAScript 5.1 - Section 5.1.5 The JSON Grammar」が公開されます。
そして2013年10月には、同じくECMA InternationalからJSON単体の仕様「ECMA-404 The JSON Data Interchange Syntax」が発表されました。
IETF JSON Working Group発足
この頃、IETFのJSON仕様であるRFC 4627にはいくつかの改善すべき点が指摘されており、またECMAのJSON仕様であるECMA-404とRFC 4627のあいだにもいくつかの不整合な点などがありました。
そこで、これらを改善したJSON仕様を策定しようとIETFは「JSON Working Group」を発足します。
JSONの発見者であるDouglas Crockford氏はこの仕様策定に参加していましたが、策定作業は難航。そこでJSON仕様策定のメーリングリストなどで提言を行っており、XMLでの仕様策定の経験もあるTim Bray氏が仕様策定に参加します。
2014年、RFC 7159登場
2014年3月、Tim Bray氏がオーサーとなったJSON仕様がIETFから「RFC 7159」として公開されました。
これにより、2006年に公開されたDouglas Crockford氏によるRFC 4627は廃止されました。
Tim Bray氏はRFC 7159発表にあたり、自身のブログにポストした記事「JSON Redux AKA RFC7159」(JSONの復帰あるいはRFC7159)で、RFC 7159について次のように説明しています。
RFC7159 cleans up some ambiguities and inconsistencies in various JSON definitions, none of which caused any real-world pain.
RFC7159は、数種類のJSONの定義によるいくつかの曖昧さや矛盾を、現実において大きな問題を引き起こすことなく一掃した。
More important, it captures industry experience about stupid things you can do in your JSON that are allowed by the spec but will cause problems in practice.
より重要なことは、仕様として許されていたために問題となっていたつまらない部分について、業界の経験を踏まえた対応をしたことである。
2017年12月、ECMAとの統一と最後のJSON仕様
残る課題はIETFとECMAの両仕様の統合でした。
数年かけてJSON仕様はさらにブラッシュアップされ、そして前述のように、IETFとECMAは合意に達しました。
その結果、統一仕様として2017年12月、IETFからは「RFC 8259」が、ECMAからは「ECMA-404」が発表されたのです。
参考記事
JSONというテクニックを発見し世に広めたDouglas Crockford氏が登場し、彼がどのようにJSONを"発見"し、定義したのか、XMLやJSONといったデータ記述言語をどのように考えているのか、彼自身の考えが語られています。そして、実はCrockford氏よりも先にJSONが発見されていたというエピソードも紹介されています。
JSONが、JavaScriptの標準化団体でもあるECMA Internationalで標準化され、仕様文書が「ECMA-404」として公開されたと、Douglas Crockford氏がGoogle+でつぶやいています。
あわせて読みたい
マイクロソフトとVMwareが一転、「VMware virtualization on Azure」で協力体制に
≪前の記事
Kubernetes 1.9リリース。主要なAPIが正式版に、Windows Serverサポート、コンテナストレージインターフェイスも