SlideShare une entreprise Scribd logo
1  sur  20
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

Contenu connexe

Tendances

Wpfと非同期
Wpfと非同期Wpfと非同期
Wpfと非同期
yone64
 
これからはじめるインフラエンジニア
これからはじめるインフラエンジニアこれからはじめるインフラエンジニア
これからはじめるインフラエンジニア
外道 父
 
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪
崇之 清水
 

Tendances (20)

AWS Redshift Analyzeの必要性とvacuumの落とし穴
AWS Redshift Analyzeの必要性とvacuumの落とし穴AWS Redshift Analyzeの必要性とvacuumの落とし穴
AWS Redshift Analyzeの必要性とvacuumの落とし穴
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
 
WPF開発での陥りやすい罠
WPF開発での陥りやすい罠WPF開発での陥りやすい罠
WPF開発での陥りやすい罠
 
失敗から学ぶAWSの監視
失敗から学ぶAWSの監視失敗から学ぶAWSの監視
失敗から学ぶAWSの監視
 
Wpfと非同期
Wpfと非同期Wpfと非同期
Wpfと非同期
 
これからはじめるインフラエンジニア
これからはじめるインフラエンジニアこれからはじめるインフラエンジニア
これからはじめるインフラエンジニア
 
Black Belt Online Seminar AWS Amazon S3
Black Belt Online Seminar AWS Amazon S3Black Belt Online Seminar AWS Amazon S3
Black Belt Online Seminar AWS Amazon S3
 
20200212 AWS Black Belt Online Seminar AWS Systems Manager
20200212 AWS Black Belt Online Seminar AWS Systems Manager20200212 AWS Black Belt Online Seminar AWS Systems Manager
20200212 AWS Black Belt Online Seminar AWS Systems Manager
 
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪
 
Hyper-V ネットワークの基本
Hyper-V ネットワークの基本Hyper-V ネットワークの基本
Hyper-V ネットワークの基本
 
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design PatternAWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
 
AWS Black Belt Techシリーズ AWS Elastic Beanstalk
AWS Black Belt Techシリーズ  AWS  Elastic  BeanstalkAWS Black Belt Techシリーズ  AWS  Elastic  Beanstalk
AWS Black Belt Techシリーズ AWS Elastic Beanstalk
 
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDayマイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
 
UWP アプリを JavaScript で作る 3つの方法
UWP アプリを JavaScript で作る 3つの方法UWP アプリを JavaScript で作る 3つの方法
UWP アプリを JavaScript で作る 3つの方法
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
Amazon Simple Workflow Service (SWF)
Amazon Simple Workflow Service (SWF)Amazon Simple Workflow Service (SWF)
Amazon Simple Workflow Service (SWF)
 
AWS Lambdaのテストで役立つ各種ツール
AWS Lambdaのテストで役立つ各種ツールAWS Lambdaのテストで役立つ各種ツール
AWS Lambdaのテストで役立つ各種ツール
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツ
 
20180425 AWS Black Belt Online Seminar Amazon Relational Database Service (Am...
20180425 AWS Black Belt Online Seminar Amazon Relational Database Service (Am...20180425 AWS Black Belt Online Seminar Amazon Relational Database Service (Am...
20180425 AWS Black Belt Online Seminar Amazon Relational Database Service (Am...
 
Aws auto scalingによるwebapサーバbatchサーバの構成例
Aws auto scalingによるwebapサーバbatchサーバの構成例Aws auto scalingによるwebapサーバbatchサーバの構成例
Aws auto scalingによるwebapサーバbatchサーバの構成例
 

Similaire à ASP.NET Core WebAPIでODataを使おう

Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osaka
Naotaka Jay HOTTA
 
Dot netcore multiplatform 2
Dot netcore multiplatform 2Dot netcore multiplatform 2
Dot netcore multiplatform 2
shozon
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門
Hisashi HATAKEYAMA
 
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
david9142
 
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるNetラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
david9142
 

Similaire à ASP.NET Core WebAPIでODataを使おう (20)

Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osaka
 
ASP. NET Core 汎用ホスト概要
ASP. NET Core 汎用ホスト概要ASP. NET Core 汎用ホスト概要
ASP. NET Core 汎用ホスト概要
 
Dot netcore multiplatform 2
Dot netcore multiplatform 2Dot netcore multiplatform 2
Dot netcore multiplatform 2
 
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)
 
ASP.NET MVC 1.0
ASP.NET MVC 1.0ASP.NET MVC 1.0
ASP.NET MVC 1.0
 
Entity Framework(Core)についての概要を学ぼう
Entity Framework(Core)についての概要を学ぼうEntity Framework(Core)についての概要を学ぼう
Entity Framework(Core)についての概要を学ぼう
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門
 
SQL Beginners Day #1 - SQL Server および Azure SQL のインストールと管理
SQL Beginners Day #1 - SQL Server および Azure SQL のインストールと管理SQL Beginners Day #1 - SQL Server および Azure SQL のインストールと管理
SQL Beginners Day #1 - SQL Server および Azure SQL のインストールと管理
 
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
 
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるNetラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
 
Mvc conf session_5_isami
Mvc conf session_5_isamiMvc conf session_5_isami
Mvc conf session_5_isami
 
Springでdao 20070413
Springでdao 20070413Springでdao 20070413
Springでdao 20070413
 
5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境
 
5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境
 
Ruby on Rails Tutorial Chapter5-7
Ruby on Rails Tutorial Chapter5-7Ruby on Rails Tutorial Chapter5-7
Ruby on Rails Tutorial Chapter5-7
 
はじめての ASP.NET MVC
はじめての ASP.NET MVCはじめての ASP.NET MVC
はじめての ASP.NET MVC
 
The seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurugThe seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurug
 
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
 
はじめての Azure 開発
はじめての Azure 開発はじめての Azure 開発
はじめての Azure 開発
 
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
 

Plus de DevTakas

Plus de DevTakas (18)

Microsoft Graph Toolkitで手軽にM365フロント開発
Microsoft Graph Toolkitで手軽にM365フロント開発Microsoft Graph Toolkitで手軽にM365フロント開発
Microsoft Graph Toolkitで手軽にM365フロント開発
 
Azure Artifactsを触ってみよう
Azure Artifactsを触ってみようAzure Artifactsを触ってみよう
Azure Artifactsを触ってみよう
 
Azure Web PubSub Serviceを触ってみた
Azure Web PubSub Serviceを触ってみたAzure Web PubSub Serviceを触ってみた
Azure Web PubSub Serviceを触ってみた
 
Microsoft Graph Toolkitを使ってGraph開発を体験しよう
 Microsoft Graph Toolkitを使ってGraph開発を体験しよう Microsoft Graph Toolkitを使ってGraph開発を体験しよう
Microsoft Graph Toolkitを使ってGraph開発を体験しよう
 
Azure ADアプリケーションを使用した認証のあれやこれ ASP.NET Core編
Azure ADアプリケーションを使用した認証のあれやこれ ASP.NET Core編Azure ADアプリケーションを使用した認証のあれやこれ ASP.NET Core編
Azure ADアプリケーションを使用した認証のあれやこれ ASP.NET Core編
 
Azure ADアプリケーションを使用した認証のあれやこれ
Azure ADアプリケーションを使用した認証のあれやこれAzure ADアプリケーションを使用した認証のあれやこれ
Azure ADアプリケーションを使用した認証のあれやこれ
 
Microsoft Graphのことはじめ
Microsoft GraphのことはじめMicrosoft Graphのことはじめ
Microsoft Graphのことはじめ
 
Azure Event HubsでGraph変更通知を受け取る
Azure Event HubsでGraph変更通知を受け取るAzure Event HubsでGraph変更通知を受け取る
Azure Event HubsでGraph変更通知を受け取る
 
msal.js v2を触る
msal.js v2を触るmsal.js v2を触る
msal.js v2を触る
 
僕はあなたを監視する(MS Graph Subscriptionのβで公開されたpresencesを使おう!)
僕はあなたを監視する(MS Graph Subscriptionのβで公開されたpresencesを使おう!)僕はあなたを監視する(MS Graph Subscriptionのβで公開されたpresencesを使おう!)
僕はあなたを監視する(MS Graph Subscriptionのβで公開されたpresencesを使おう!)
 
TeamsのチャネルとやりとりするWeb Applicationを作ったお話
TeamsのチャネルとやりとりするWeb Applicationを作ったお話TeamsのチャネルとやりとりするWeb Applicationを作ったお話
TeamsのチャネルとやりとりするWeb Applicationを作ったお話
 
Azure AD Application を使用した認証のアレコレ
Azure AD Applicationを使用した認証のアレコレAzure AD Applicationを使用した認証のアレコレ
Azure AD Application を使用した認証のアレコレ
 
Microsoft Graphの変更通知で遊ぶ
Microsoft Graphの変更通知で遊ぶMicrosoft Graphの変更通知で遊ぶ
Microsoft Graphの変更通知で遊ぶ
 
Microsoft Graphを使ってアプリケーションを作った時の話
Microsoft Graphを使ってアプリケーションを作った時の話Microsoft Graphを使ってアプリケーションを作った時の話
Microsoft Graphを使ってアプリケーションを作った時の話
 
Microsoft Graphことはじめ クエリパラメータ編
Microsoft Graphことはじめ クエリパラメータ編Microsoft Graphことはじめ クエリパラメータ編
Microsoft Graphことはじめ クエリパラメータ編
 
Microsoft Graph完全に理解した気がしてた
Microsoft Graph完全に理解した気がしてたMicrosoft Graph完全に理解した気がしてた
Microsoft Graph完全に理解した気がしてた
 
AzureADの認証で失敗した話
AzureADの認証で失敗した話AzureADの認証で失敗した話
AzureADの認証で失敗した話
 
msal.jsを使う
msal.jsを使うmsal.jsを使う
msal.jsを使う
 

ASP.NET Core WebAPIでODataを使おう