Skip to content

MS_OData

nishi_74322014 edited this page Aug 3, 2026 · 1 revision

OData

概要

詳細

  • 更新操作をサポートする OData プロトコルは、
    データソースとの接続と操作を簡素にする仕組みを提供しようとしている。

  • こう書くと、

    • GraphQL に似ていることが解る。
    • 海外記事には「GraphQL vs(or) OData」がある。
    • OData は MS しか使ってないっぽく、GraphQL の方が人気。

移行メモ(補足): 「XML 版の GraphQL」という説明は位置付けとしては解りやすいが、 正確には次のとおりである。

  • OData は ATOM(XML)と JSON の両方をサポートする。 v4 以降は JSON が既定であり、XML 専用ではない。
  • OASIS の標準規格(OData v4.0 は ISO/IEC 20802 にもなっている)であって、 MS 独自仕様ではない。ただし実装の主体が MS に偏っているのは事実である。
  • クエリの自由度をクライアントに渡す点は GraphQL と同じ発想だが、 OData は URL のクエリ文字列で表現する (GraphQL は POST ボディの専用言語)。

クエリ オプション

OData の特徴は、URL に付けるクエリ オプションで 射影・絞り込み・並べ替え・ページングを表現できる点である。

オプション 用途
$select 返すプロパティを絞る ?$select=Name,Price
$filter 条件で絞り込む ?$filter=Price gt 100
$orderby 並べ替え ?$orderby=Price desc
$top / $skip ページング ?$top=20&$skip=40
$expand 関連エンティティを展開 ?$expand=Category
$count 件数を返す ?$count=true
  • メタデータは $metadata エンドポイントから CSDL(XML)として取得でき、
    Swagger (OpenAPI) における定義書に相当する役割を果たす。

補足: GraphQL と同じく、 クライアントに任意のクエリを許すことの危険性は OData にもある。 $expand の多段や $filter の複雑な条件は、 そのまま重い SQL に変換されうる。 ASP.NET Core OData では [EnableQuery(MaxExpansionDepth = ..., MaxTop = ...)] で 上限を設定できるので、公開 API では必ず制限すること。

なお、URL に条件が乗るということは キャッシュ・コントロールのHTTPヘッダ による HTTP キャッシュが効くということでもあり、 この点は GraphQL に対する OData の利点である。

現在の位置付け

補足(最新化): 汎用の Web API 技術としては REST / Swagger (OpenAPI)GraphQL に押されているが、 Microsoft 製品の中では現役である。

  • Microsoft GraphGraph API)は OData ベース
  • Dynamics 365 の Web API は OData v4
  • SharePoint / Business Central の API
  • ASP.NET Core では Microsoft.AspNetCore.OData で実装できる

「MS 系の製品と連携する」用途では避けて通れない。

参考


Tags: IT国際標準, プログラミング, 通信技術, .NET開発, ASP.NET

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally