おさらい
ASP.NET Core Web APIでSnake Caseに対応する - Body編 - yamamoWorks
ASP.NET Core Web APIでSnake Caseに対応する - Query編 - yamamoWorks
Body編、Query編でモデルクラスやアクションメソッドの引数を変えることなくレスポンスJsonやURLクエリパラメータを「snake_case」に適応させました。
ASP.NET Core Web APIでSnake Caseに対応する - Swagger編 - yamamoWorks
Swagger編ではSwashbuckleを使ったSwagger出力に「snake_case」を対応させました。
このSwagger編ではSwashbuckleのカスタマイズ機能を使って実現しましたが、ASP.NET Core Web APIには標準でAPI仕様をモデル化したMicrosoft.AspNetCore.Mvc.ApiExplorer
が提供されているので、今回はこれにも対応できる方法を紹介します。(Swagger編を置き換える形)
名称 | 例 |
---|---|
Upper Camel Case (Pascal Case) | FirstName |
Lower Camel Case | firstName |
Snake Case | first_name |
Screaming Snake Case | FIRST_NAME |
Kebab Case | first-name |
Train Case | First-Name |
IApiDescriptionProvider
ApiExplorerの仕組みでAPI仕様を司っているのがMicrosoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionProvider
インターフェイスです。文字通りAPIの説明を提供してくれます。
その実装であるMicrosoft.AspNetCore.Mvc.ApiExplorer.DefaultApiDescriptionProvider
が標準でServiceCollectionに登録されています。
今回はカスタムのApiDescriptionProviderを実装しDefaultApiDescriptionProviderと入れ替えることで「snake_case」に対応させます。
// ConfigureServices Method in Startup.cs services.AddTransient<IApiDescriptionProvider, SnakeCaseApiDescriptionProvider>(); services.Remove(services.Single(s => s.ImplementationType == typeof(DefaultApiDescriptionProvider)));
これでSwashbuckleのカスタマイズ機能を使わなくても、標準のApiExplorerフレームワークに沿って「snake_case」対応ができました。