3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

なぜWeb標準のAPIがいいのか改めて考える

Last updated at Posted at 2022-03-16

最近はDenoの普及により、Web APIの利用機会が増えました。Web APIが使えることはメリットの一つとされていますが、なぜWeb APIを使えることが良いことだとされているのか、改めて考えてみたいと思います。

そもそもWeb APIとは何か

JavaScriptはランタイムによる拡張が許されている言語です。全てのランタイムで使えるArrayMapなどの標準組み込みオブジェクトのほかに、固有のランタイムでしか使えないfetchprocessなどの拡張APIがあります。

この拡張API、ランタイムごとにいくつかの種類が存在します。例えば、

などが該当します。

このうち「Web API」はwhatwgで定義されており、みなさんがいつもブラウザで使っているfetchdocumentHTMLElementURLなどが含まれています。

近年ではWeb APIをブラウザだけでなくNode.jsやDenoにも導入し、サーバーサイドでもWeb APIを使おうという動きが広がっています。
この動きについて、どういうメリットがあるのか整理したいと思います。

Web APIをサーバー側にも導入するメリット

JavaScript実行環境はブラウザとサーバー、だけではない

JavaScriptが動く場所はブラウザとサーバーだけでなく多岐にわたります。筆者が認知しているJavaScriptランタイムとしては以下のような種類があります。

  • ブラウザ
  • Node.js
  • Deno
  • Google Apps Script
  • ブラウザの拡張機能
  • Waveformsという波形解析ツールで動くスクリプト

もし仮に、各ランタイムが完全に別々のAPIを採用していたらどうなるでしょうか?

各ランタイム共通で動作するコードを書くためには、
if (EventTarget) else if (EventEmitter) else if (MyEventEmitter) else if (SugoiEventEmitter) else if (OreOreEventEmitter) else if (EventEmitterPollyfil) else ...(以下略)となるのが目に見えますね。

このような状況を防ぐためには、事前にWeb APIというランタイム共通の仕様を定めておき、各ランタイムが必要な場合はその仕様に沿って実装するという方法が最善です。

もちろん、全てのWeb APIを実装する必要はありません。APIの中から一部の機能だけ実装することになるとしても、別のAPIを「車輪の最発明」するよりはいいです。

Denoは(自分が知る範囲では)この方針であり、「導入したいAPIがWeb APIにあれば、それを実装する」「Web APIにあるものでも、Denoにとって必要なければ実装しない」という方針になっています。

かつてInternet explorerとNetScapeという2つのブラウザが主流だった頃、両者のAPIには互換性がありませんでした。違うブラウザでは実装を共有できないのが当たり前だった時代だと思います。しかし、共通のAPIを実装しなかったブラウザは廃れました。
今はブラウザとサーバーで実装を共有できないのが当たり前な時代ですが、いつかはそんな常識も破られる日が来るかもしれません。

WPTによるテスト

Web APIには「WPT(Web Platform Test)」が存在します。これはその名の通り、Web API向けのテストコードです。

Web APIを実装するランタイムは、WPTにあるテストコードを使って実装をテストします。

仮に、Web APIではない独自のAPIが実装されたランタイムがあるとします。
その場合は当然、テストも1から実装されることになります。普通のユーザーから見れば、テストが正しいかどうかなんて分かりません。

その点、Web APIを使っているランタイムなら、WPTの通過率を見ることでAPIの信頼性を他のランタイムと比較することができます。WPTという信頼度の高いテストが最初から用意されているというのが、Web APIを使うメリットです。

仕様が堅牢

JavaScriptは特殊な言語です。一度stable(安定)としてWebに出荷されたAPIは、基本的には後方互換性のために削除できません。

この「削除できない」という理由から過去の古いAPI(atobXMLHttpRequest)がまだ残っていることが批判の対象になっていたりしますが、それはまあそういう物です。後方互換性のために残っているだけなので無視してください。

話を元に戻します。一度出荷されたAPIは削除できないことから、最近作られるWeb APIは堅牢な設計になっています。ライブラリのアップデートで使い方が変わり、コードの書き換えを余儀なくされた経験がある方も多いと思いますが、Web APIについてはそういう事が無いので安心して使えます。

Web APIの設計方針については、こちらのページが詳しいです。

まとめ

Web APIが利用できることは以下のようなメリットがあります。

  1. 多数のJavaScript実行環境で共通の仕様を持つことで分断を回避する
  2. WPTによるテストで信頼性を確保
  3. 堅牢なAPI設計
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?