Web APIの歴史としてはREST APIが大きな転換期になったと思われます。10年以上に渡って使われ続けていますが、徐々に向き不向きが出てきました。そんな中、ここ数年はGraphQLに注目が集まっています。 今回紹介するのはさらに次世代のWeb APIともいえそうなAskQLを紹介します。askを冠につけたクエリ言語になります。

AskQLの使い方

AskQLでは ask 〜といった形式で記述します。

const askql = require('askql');

(async () => {
  const result = await askql.runUntyped(
    { resources: askql.askvm.resources },
    askql.parse("ask { 'hello world!' }")
  );

  console.log(JSON.stringify(result, null, 2));
})();

例えばクエリの例です。検索条件を指定したり、関数やテキスト変換を含めたりできます。

ask {
    query {
        firstField: otherField
        secondField :fun2(34, 'adfs', [])
        thirdField :fun3(fun2(34, 'adfs', []))
        upperCaseFullName: fullName :firstName :concat(' ', lastName) :toUpperCase
    }
}

検索条件の指定例です。whereを使います。

ask {
  query {
    friends::knex:where({ email: 'hi@example.com' }) {
      firstName
      lastName
    }
  }
}

AskQLはFacebookとGoogleの元従業員の人たちが開発しています。GraphQLでは解決できなかった問題をAskQLで解決しようということでしょう。クエリにJavaScriptのコードが書けますが、evalとは異なりセキュリティにも気を配られているとのことです。AskQLを実装するサーバの言語がJavaScriptに限定されてしまいそうなのが気になりますが、覚えておきたいソフトウェアです。

AskQLはTypeScript製のオープンソース・ソフトウェア(MIT License)です。

AskQL - Write flexible distributed software easier and faster than ever xFAANG/askql: AskQL is a query language that can express any data request