GraphQL API
RDF Portal は、広く普及している API クエリ言語 GraphQL を
使ってライフサイエンスデータセットを検索できる GraphQL API を提供しています。GraphQL API は、スキーマ駆動型の直感的なクエリインターフェースとして SPARQL の代替手段
となり、特に Web アプリケーション開発に慣れた方にとって、RDF データセットから構造
化データを取得しやすくなります。
サービスURL: https://rdfportal.org/grasp
注意: GraphQL API は現在、限られたデータベースのみを対象としています: UniProt、ChEBI、ChEMBL、MedGen。今後のアップデートで対応データベースを追加する予定です。
GraphQL とは
GraphQL は、Facebook(現 Meta)が2012年に開発し、2015年にオープンソースとして公開
した API 向けクエリ言語です。従来の REST API ではエンドポイントごとに固定のデータ
構造が返されるのに対し、GraphQL ではクライアントが必要なフィールドを正確に指定して、1回のリクエストでデータを取得できます。主な利点は以下の通りです。
- 必要なデータだけ取得 — 取得するフィールドを正確に指定でき、不要なデータの過
剰取得を避けられます。
- 単一エンドポイント — リソースごとに異なるURLを使い分ける必要がなく、すべてのクエリが1つのエンドポイントに送られます。
- ネストされたクエリ — データセット間の関係をたどり、複数のエンティティにまた
がる関連データを1つのクエリで取得できます。
- 自己文書化 — スキーマが利用可能なすべての型とフィールドを定義しており、GraphiQL などのツールを通じてインタラクティブに探索できます。
Grasp: GraphQL-SPARQL ブリッジ
RDF Portal の GraphQL API は、DBCLS が開発したオープンソースのミドルウェア Grasp によって実現されています。Grasp は GraphQL と SPARQL の間のブリッジとして機能します。クライアントから GraphQL クエリを受け取り、そ
れを SPARQL クエリに変換し、RDF Portal の SPARQL エンドポイントに対して実行し、結
果を標準的な GraphQL レスポンス形式で返します。
これにより、ユーザーは SPARQL クエリを書く必要なく、RDF Portal 上の豊富な相互リン
クされた RDF データセットを活用できます。Grasp は、複数のデータベースにまたがるク
エリも含めて、変換を透過的に処理します。
Grasp の詳細については、GitHub リポジトリ をご参照ください。
インタラクティブクエリインターフェース
サービスURL https://rdfportal.org/grasp では、GraphiQL インターフェースを提供しています。GraphiQL は、GraphQL クエリをブラウザ上で記
述・実行できるインタラクティブな IDE です。スキーマの探索、オートコンプリート付き
のクエリ記述、結果の即時確認が可能です。
クエリ例
以下の例は、GraphQL API を通じて RDF Portal のデータセットにクエリする方法を示しています。
例 1: 基本クエリ — MedGen エントリの取得
特定の ID で MedGen エントリの基本情報を取得します。リンクされた NCBI Gene 識別子
も含みます。
query {
MedGen(id: ["C1835407", "C1835223"]) {
iri
id
label
ncbigene
}
}
例 2: 詳細クエリ — MedGen の全フィールドの取得
MedGen から、説明、概念名、定義、関連メタデータなど包括的な情報を取得します。
query {
MedGen(id: ["C1835407", "C1835223"]) {
iri
id
label
ncbigene
description
sty
name_label
name_source
name_suppress
mgdef_description
mgdef_source
mgdef_suppress
mgconso_aui
mgconso_ispref
mgconso_stt
mgconso_ts
mgconso_label
mgconso_source
mgconso_suppress
mgsat_metaui
mgsat_stype
mgsat_identifier
mgsat_source
mgsat_value
mgsat_label
mgsat_suppress
}
}
例 3: ClinVar クエリ — バリアント情報の取得
ClinVar から臨床バリアントデータを取得します。アクセッション番号、サブミッション数、レビューステータス、種の情報を含みます。
query {
ClinVar(id: "5378") {
iri
label
accession
submissions
status
species
}
}
例 4: UniProt クエリ — タンパク質の詳細情報の取得
UniProt からタンパク質の詳細情報を取得します。遺伝子名、酵素分類、配列、機能アノテーションなどを含みます。
query {
UniProt(id: "Q94KE2") {
label
mnemonic
existence
gene_name
ec
sequence
function
affinity
activity
kinetics
ph_dependence
}
}
例 5: ネストクエリ — UniProt とリンクされたデータベース
GraphQL の強みの1つは、1つのクエリで関係をたどれることです。この例では、UniProt のタンパク質エントリと、リンクされた ChEBI 化合物、Gene Ontology(GO)アノテーション、HGNC 遺伝子情報をまとめて取得しています。
query {
UniProt(id: "Q94KE2") {
label
mnemonic
existence
gene_name
ec
sequence
function
affinity
activity
kinetics
ph_dependence
ChEBI {
formula
}
GO {
id
label
namespace
}
HGNC {
id
label
description
location
}
}
}
例 6: クロスデータベースクエリ — ChEMBL からChEBI・UniProt への横断検索
この例は、ChEMBL の化合物を起点としたクロスデータベースクエリです。化合物の化学的
性質や医薬品開発情報に加え、リンクされた ChEBI 識別子および UniProt のタンパク質ターゲット情報を取得します。
query {
ChEMBL(id: "CHEMBL941") {
label
smiles
atc
alogp
drug_development_phase
pchembl
ChEBI {
id
charge
}
UniProt {
mnemonic
label
organism
}
}
}
プログラムからのアクセス
GraphQL クエリはプログラムから送信することもできます。例えば、curl を使う場合:
curl -X POST https://rdfportal.org/grasp \
-H "Content-Type: application/json" \
-d '{"query": "{ UniProt(id: \"Q94KE2\") { label mnemonic gene_name } }"}'
Python の requests ライブラリを使う場合:
import requests
query = """
{
UniProt(id: "Q94KE2") {
label
mnemonic
gene_name
ec
}
}
"""
response = requests.post(
"https://rdfportal.org/grasp",
json={"query": query}
)
print(response.json())