SlideShare a Scribd company logo
ASP.NET Core WebAPIでODataを使おう
2021.02 .NETラボ
誰?
@DevTakas
Angular / Azure / .NET Core / Azure DevOps / Microsoft Graph
Microsoft MVP OfficeDevelopment
誰?
ブログやってます
http://takasdev.hatenablog.com/
「はまったりひらめいたり…とか…」
おしながき
1. ODataとは
2. ASP.NET Core WebAPIでODataを使おう
3. 実際にどのように使用しているのか
4. まと��
1. ODataとは
• Open Data Protocol
• RESTベースの仕様
• Microsoftが主導して策定
• ISO / OASIS で標準化もされている
• ISO/IEC 20802-1:2016
• ISO/IEC 20802-2:2016
1. ODataとは
-ODataがどんなことができるのか知る
• リソースの取得
{
"@odata.context": "https://localhost:44352/api/$metadata#users",
"value": [
{
"userId": 1,
"name": "1ユーザー"
},
{
"userId": 2,
"name": "2ユーザー"
},
{
"userId": 3,
"name": "3ユーザー"
},
…
GET https://localhost:44352/api/users
1. ODataとは
-ODataがどんなことができるのか知る
• メタデータの取得
<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
<edmx:DataServices>
<Schema Namespace="DotNetLab2021Feb.Api.Models" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<EntityType Name="User">
<Key>
<PropertyRef Name="userId" />
</Key>
<Property Name="userId" Type="Edm.Int32" Nullable="false" />
<Property Name="name" Type="Edm.String" />
</EntityType>
…
GET https://localhost:44352/api/$metadata
1. ODataとは
-Microsoft Graphを通じてクエリでどんなことができるのか知る
• クエリパラメータの使用
• ODataの仕様書で定義されているクエリパラメータ
• $filter
• $orderby
• $top
• $skip
• $count
• $search
• $select
• $expand
…
1. ODataとは
-Microsoft Graphを通じてクエリでどんなことができるのか知る
• クエリ パラメーターを使用して応答をカスタマイズする -
Microsoft Graph | Microsoft Docs
2. ASP.NET Core WebAPIでODataを使おう
-セットアップまで
• NuGetでパッケージを取得
• Microsoft.AspNetCore.OData
2. ASP.NET Core WebAPIでODataを使おう
-セットアップまで
• Startup.csでOData使用できるようにセットアップ
public void ConfigureServices(IServiceCollection services)
{
…
service.AddOData();
service.AddMvcCore(options => {
foreach (var outputFormat in options.OutputFormatters.OfType…)
{
outputFormat.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/odata"));
}
foreach (var inputFormat in options.InputFormatters.OfType…)
{
inputFormat.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/odata"));
}
});
…
}
2. ASP.NET Core WebAPIでODataを使おう
-セットアップまで
• Startup.csでOData使用できるようにセットアップ
public void Configure (IApplicationBuilder app, IWebHostEnvironment env)
{
…
app.UseEndPoints(endpoints => {
endpoints.MapControllers();
endpoints.Count().Select().Filter().Expand().MaxTop(500); // add
endpoints.MapDataRoute(“odataapi”, “api”, GetEdmModel()); // add
});
…
}
2. ASP.NET Core WebAPIでODataを使おう
-セットアップまで
• EdmBuilderでEdmModelの作成
• メタデータ、ODataのルーティングの元ネタ
public IEdmModel GetEdmModel()
{
var builder = new MediaTypeHeaderValue();
builder.EntitySet<User>(“Users");
builder.EntitySet<Sample>(“Samples");
builder.EnableLowerCamelCamase();
…
return builder.GetEdmModel();
}
2. ASP.NET Core WebAPIでODataを使おう
-セットアップまで
• ControllerでODataエンドポイントとなるよう指定
[ApiController]
[Route(“api/[controller]")]
public class SamplesController : ControllerBase
{
…
[HttpGet]
[EnableQuety]
public IEnumrable<Sample> GetSampleData()
{
…
}
}
2. ASP.NET Core WebAPIでODataを使おう
-Tips
• Entity Frameworkと相性がすこぶる良いように感じる
• 標準でモデルと同じプロパティ名で返却される
• 頭文字が大文字になる。LowerCamelCaseにしたい場合は一手間必要
• EdmModelBuilderの設定部分で最初は詰まることになるかも
• 次バージョン(8)から設定方法が地味に変わる
3. 実際にどのように使用しているのか
-共通で使用するようなマスタデータのWebAPIとして
• フィルタが超柔軟なのを活かせる
• いろんなサービスから使われたとしても
クエリパラメータのインターフェイスを気にする必要なし
3. 実際にどのように使用しているのか
-大量データを取り扱う場合
• Top/Skip/NextLink/Filterを利用する
• 必要最低限のデータをTopで取得して初回Loadingを高速に
• 残データをSkipで取得し裏でデータ更新を行う
• Filterを使用して更新が発生したデータも取り込む
3. 実際にどのように使用しているのか
-大量データを取り扱う場合
• Top/Skip/NextLink/Filterを利用する
• 必要最低限のデータをTopで取得して初回Loadingを高速に
• 残データをSkipで取得し裏でデータ更新を行う
• Filterを使用して更新が発生したデータも取り込む
まとめ
• ODataで定義されているクエリパラメータなどを使用すれば
WebAPIを更に便利に活用できるようになる
• ASP.NET Coreでは比較的容易にODataの導入が行える
• Entity Frameworkと相性が良い
• 活用できる幅はかなり大きそうなのでおすすめ。
参考ページ
• Experimenting with OData in ASP.NET Core 3.1 | OData (microsoft.com)
• ASP.NET Core OData 8.0 Preview for .NET 5 | OData (microsoft.com)
• OData - the Best Way to REST
• ISO - ISO/IEC 20802-1:2016 - Information technology — Open data protocol (OData) v4.0 — Part 1: Core
• ISO - ISO/IEC 20802-2:2016 - Information technology — Open data protocol (OData) v4.0 — Part 2: OData JSON Format
• OASIS Open Data Protocol (OData) TC | OASIS (oasis-open.org)
• Understand OData in 6 steps · OData - the Best Way to REST
• OData Version 4.01. Part 1: Protocol (oasis-open.org)
• クエリ パラメーターを使用して応答をカスタマイズする - Microsoft Graph | Microsoft Docs

More Related Content

ASP.NET Core WebAPIでODataを使おう