Contenu connexe Similaire à ASP.NET Core WebAPIでODataを使おう (20) ASP.NET Core WebAPIでODataを使おう5. 1. ODataとは
• Open Data Protocol
• RESTベースの仕様
• Microsoftが主導して策定
• ISO / OASIS で標準化もされている
• ISO/IEC 20802-1:2016
• ISO/IEC 20802-2:2016
7. 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
10. 2. ASP.NET Core WebAPIでODataを使おう
-セットアップまで
• NuGetでパッケージを取得
• Microsoft.AspNetCore.OData
11. 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"));
}
});
…
}
12. 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
});
…
}
13. 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();
}
14. 2. ASP.NET Core WebAPIでODataを使おう
-セットアップまで
• ControllerでODataエンドポイントとなるよう指定
[ApiController]
[Route(“api/[controller]")]
public class SamplesController : ControllerBase
{
…
[HttpGet]
[EnableQuety]
public IEnumrable<Sample> GetSampleData()
{
…
}
}
15. 2. ASP.NET Core WebAPIでODataを使おう
-Tips
• Entity Frameworkと相性がすこぶる良いように感じる
• 標準でモデルと同じプロパティ名で返却される
• 頭文字が大文字になる。LowerCamelCaseにしたい場合は一手間必要
• EdmModelBuilderの設定部分で最初は詰まることになるかも
• 次バージョン(8)から設定方法が地味に変わる
20. 参考ページ
• 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