日本語

Salesforce
デベロッパー
ブログ

Salesforce GraphQL APIの概要

Avatar for Ben SklarBen Sklar
Salesforce GraphQL APIはベータ版として、Summer ’22でリリースされます。このAPIにより、GraphQLを介したSalesforce Platformとのやり取りが可能となり、モバイルおよびWebの高性能かつ機能豊富なアプリケーションを新たな方法で作成できるようになります。ベータ版は、レコードのクエリを特色としています。特定の情報を持つ、組織のsObjectを検索できるようになります。
Salesforce GraphQL APIの概要
October 24, 2022

SalesforceはSalesforce GraphQL APIの提供を開始し、体験APIに今後一層の投資を行うと発表できることを嬉しく思います。Salesforce GraphQL APIはベータ版として、Summer ’22でリリースされます。

SalesforceはSalesforce GraphQL APIの提供を開始し、体験APIに今後一層の投資を行うと発表できることを嬉しく思います。Salesforce GraphQL APIはベータ版として、Summer ’22でリリースされます。このAPIにより、GraphQLを介したSalesforce Platformとのやり取りが可能となり、モバイルおよびWebの高性能かつ機能豊富なアプリケーションを新たな方法で作成できるようになります。ベータ版は、レコードのクエリを特色としています。特定の情報を持つ、組織のsObjectを検索できるようになるのです。


従来のREST APIの問題点

想像してみてください。あなたは今、お気に入りのレストランに来ています。店の名前は「RESTaurant」ということにしましょう。ウェイターがテーブルにやって来て、「ご注文は?」と尋ねます。あなたは答えます。「ラヴィオリをお願いします。ただしチーズ抜きで」しかし残念なことに、ウェイターはこんなふうに説明するのです。「すでにチーズを使って料理してしまっているので、取り除くことはできません。チーズ入りのラヴィオリにするか、別のものをご注文ください」従来のRESTエンドポイントの根本的な問題もこれと同じです。クライアントはチーズ入りのラヴィオリというエンドポイントが返してくるものを変更することはできません。しかし、「GraphQLレストラン」であれば、チーズ抜きのラヴィオリを注文できます。

こう言うと、こんな反応が返ってくるかもしれません。「でも、RESTは代表的なAPIだったはずでしょう?」この意見は間違いではありません。RESTは今なお、APIの設計や実装のための優れた方法です。しかし従来型のREST APIは、高性能かつ拡張性に優れたWebおよびモバイルのアプリケーションを構築する上で、近年いくつかの課題を示すようになりました。

以下では、従来型REST APIのさまざまな課題を解説します。また、GraphQLとは何か、これらの課題をどのように解消するかについてもご紹介します。特定の情報を持つ組織のデータのクエリなど、GraphQLのその他のメリットについての情報もご提供します。GraphQL APIのメリットをすべてご覧いただけば、ユーザ向けに最高品質のアプリケーションを構築する際に、ぜひ活用してみたいと思っていただけるはずです。

GraphQLとは

GraphQLはAPIの標準のクエリ言語であり、お使いのデータでクエリを実行するためのランタイムでもあります。GraphQL APIはデータ送受信の新たなパラダイムとして、1度のリクエストで必要なデータをすべて要求できる、単一のエンドポイントをクライアントに提供します。GraphQL APIと呼ばれるアプリケーションは、従来のREST APIを用いたアプリケーションと比較して、性能が大幅に向上していることもよくあります。これは、1度の呼び出しだけで必要なデータをすべて取得する機能により、サーバーへのラウンドトリップを減らせることに理由があります。クライアントは1度のリクエストで必要なデータすべてに対するクエリを実行できますが、レスポンスには必要とするデータ以外は含まれない点もメリットです。過不足なくデータを入手できるのです。GraphQLは、アプリケーション開発者にとっての多くの課題を解消する、新しい方法です。大規模な成功を収めた、多様性のあるコミュニティの支援を受け、GraphQLの仕様はオープンソース化されています。

従来のREST APIでは開発者による制御権がない

従来のREST APIには、いくつかの欠点があります。従来型REST APIへの呼び出しにより、ユーザの電話番号を参照する場合を考えてみましょう。おそらくは、当該ユーザについて、あなたがアクセス権を持つすべてのデータを提供するREST APIエンドポイントへの呼び出しを行うはずです。すると、ユーザの電話番号だけではなく、住所やマネージャーの名前などのデータも取得することになります。しかし端的に言って、ユーザの電話番号以外に返ってくるのは無駄なデータです。これにより、サーバーにもあなたにも、不要なコストが生じます。もちろん、すべてのRESTエンドポイントにクエリパラメーターを使うことで、REST APIにより過剰なデータを取得してしまうという問題を回避することはできます。この場合の問題点は、この方法についての基準が広く導入されていないため、現在存在するすべてのエンドポイントに対して使用できるとは限らないことです。また、すでに容量に限界のあるURLでの競合が生じることもあります。エンドポイントにこの機能が備わっていない場合、対処法はありません。しかし、GraphQLを活用することで、クエリに必要とするすべての項目を含めて、この項目に対するデータのみを受け取ることができます。これは、「項目選択」として知られる機能です。

1度のAPIリクエストで過剰なデータが返ってきても、無駄になる可能性があります。こうした無駄を減らすため、必要とするデータのみを返すエンドポイントをいくつも作成するとどうなるでしょうか。このような方法では、あまりにも多数のRESTエンドポイントを作成することになり、呼び出す必要のあるエンドポイントを判断することが難しくなってしまいます。もし関連するデータがすべて必要なら、必要なデータを得るためには、これらのエンドポイントから1つずつ呼び出して、呼び出しのたびにサーバーにラウンドトリップを行う必要があります。アプリケーションの開発者は、ユーザのために品質を高めたいと考えるものです。これを実現する方法の1つが、クライアントとサーバーの間のネットワークのトリップと不要なデータ転送を最小化することです。なぜなら、ラウンドトリップが発生するたびに、レイテンシが増大するからです。このような問題は、コネクティビティや帯域幅に制限のある可能性のあるモバイルユーザに特によく見られます。GraphQL APIは、リソースを集約することで、こうした問題を解消します。言い換えれば、アプリケーションが必要とするすべてのデータを、1度のリクエストで取得することで、問題に対処しているのです。

これまでにご説明してきたとおり、REST APIは項目の選択や集約については制約がある、または全くサポートがないこともよくあります。そのたびに開発者は困難なトレードオフを迫られ、ユーザのためにできる限り最高の体験を実現しようとする取り組みに注力することができません。では、優れたパフォーマンスを実現し、データを無駄にすることもないアプリケーションを構築するにはどうすればいいのでしょうか。解決策は極めてシンプルです。不要なデータを付加することなく、求められた回答のみを返してくれる単一のRESTエンドポイントを構築するのです。しかし、そのようなエンドポイントなど存在しないということが問題です。では、開発者はニーズを過不足なく満たしてくれる、新しいRESTエンドポイントを作成するよう要求すれば良いわけですが、想定されるすべてのユースケースに合わせて新たなエンドポイントを構築することは、非現実的であるとお考えでしょう。しかし、サーバーが回答を返す項目やリソースを制御できるとしたら、それは素晴らしいことではないでしょうか。そこで登場するのが、新しいSalesforce GraphQL APIです。これにより、ユーザが回答をコントロールできる単一のエンドポイントを実現します。

GraphQLが開発者に力を与える

GraphQLは従来のREST APIとは異なり、開発者によるコントロールを実現します。クライアントからサーバーへは必要とする情報のみを要求することが可能で、不要なデータを受け取ることはありません。従来であれば複数のRESTエンドポイントの呼び出しが必要だった内容をリクエストに含めることができるため、サーバーへのラウンドトリップがいくつも発生する事態を回避できます。GraphQLのWeb IDEであるGraphiQLのような強力なツールを活用することで、スキーマを見直し、必要とするデータをリクエストする方法をすばやく確認できます。

モバイルアプリケーションやWebアプリケーションでは、ラウンドトリップのたびに長い待機時間が必要となるため、リクエストの合計処理時間の大部分をネットワーク上で費やしていました。これがユーザの満足度を低下させ、アプリケーションの利用率やコンバージョン率を引き下げる要因となっていました。しかしGraphQLを使用すれば、複数のエンドポイントを処理して、サーバーと何度もやり取りをして必要とするデータを取得しなければならないという懸念はなくなります。開発者は、呼び出しにいくつのエンドポイントが必要となるのか、あるいは受け取ったすべてのデータを統合するにはどうすればいいのかといったことに悩む必要はなく、ソフトウェアの要件のみに集中できるようになります。複数の抽象化レイヤーを作成したり、API呼び出しをいくつも調整したりする必要はありません。

Salesforce開発者にとっての意味とは

従来のREST APIには、体験の構築にあたり欠点もあるとはいえ、今なお一定の役割があり、我々が投資額を減らす予定もありません。むしろ、Salesforce Platformの大きな強みは、さまざまなタイプのAPIをサポートしていることにあります。sObject APIなどのシステムAPIや、UI APIなどのエクスペリエンスAPIにより、開発者はSalesforce Platformを活用して、多様なアプリケーションを構築することができます。新しいSalesforce GraphQL APIを取り入れることで、Salesforce開発者に以下のようなさらなるメリットがもたらされます。

  • 項目選択
  • リソースの集約
  • スキーマの見直し
  • sObjectのクエリ性能

Salesforce GraphQLのロードマップの定義

Summer ’22のリリースにおいて、Salesforce GraphQLスキーマはまずUI APIが公開されたsObjectのクエリを実現します。将来的には、Object InfoLayoutなどのUI APIファミリーの追加リソースや、その他のSalesforce APIファミリーのリソースを追加したいと考えています。スキーマに追加してほしいリソースがあれば、IdeaExchangeでお知らせください。Summer ’22ベータ版の提供開始後にGraphQL APIへのご意見がある方は、GraphQL IdeaExchangeの投稿にコメントをお寄せください。

次のステップ

サンフランシスコで4月27日~28日に開催されるTrailblazerDX ’22にご参加ください。Spencer MacKinnonとBen Sklarが新しいSalesforce GraphQL APIエンドポイントの詳細をご紹介します。ぜひお見逃しなく。来年はブログ記事で、Salesforce GraphQL APIの技術面を詳細に取りあげ、どのように構築されているか、どう活用すればよいかをさらに詳しくお伝えしていく予定です。

著者紹介

Spencer MacKinnon(写真左)はSalesforceの開発者として、GraphQLの開発に精力的に取り組んでいます。これまでさまざまな趣味を楽しんできましたが、現在は生後10週の子犬、Meropeを毎晩のように追いかけています。彼のTwitterアカウント@smackinnonをフォローしてください。

Ben Sklar(写真右)はSalesforceのシニア製品マネージャーで、GraphQLの熱心な支持者です。趣味はスキーですが、ほとんどの時間をキャバプーのPercyと過ごしています。



Get the latest Salesforce Developer blog posts and podcast episodes via Slack or RSS.

(英語のみです)

Add to Slack Subscribe to RSS

その他の関連記事

Load Data Programmatically with the Ingestion API

Load Data Programmatically with the Ingestion API

Start harnessing the power and magic of Salesforce Data Cloud by loading data programmatically into Data Cloud using the Ingestion API.July 18, 2023

Query More Data with Nested SOQL Queries in the REST API

Query More Data with Nested SOQL Queries in the REST API

Combine multiple API calls into a single API call to simplify your code and reduce the number of API calls counted against your daily limit.December 12, 2023