最小6の最小API



導入
あなたは、ミニマリズムについて聞いたことがあるかもしれませんし、もしそうでなければ、非常に表面的な方法で話すと、それは必要とされていないものを可能な限り削減したり簡素化したり、同じ目標を達成するために必需品だけを維持したり、より高いものを簡素化することを意味します.

minimalistic is used to describe something that is stripped down to its most essential elements or uses only what is needed.

-- Dictionary.com



しかし今日、私はミニマリズムが何であるかを説明するために来ませんでした、しかし、私はそれが新しい概念でAPIの開発にこの概念を適用する方法を説明します.ネット6

最小API
NET 6はそれを最小限のAPIを実装する可能性をもたらします.Node.JS Express しかし、それが来るとき、何年もこれをしています.ネット、それは新しい何かです.
アイデアは比較的簡単ですが、いくつかのコンポーネントとコードの行を必要とせずにAPIを実装することから成ります.ネット5top level が追加されましたが、これはクラスの構築を許可することなく、名前空間でブロックを追加することなく、主なメソッド、したがって、コードの行を減らす、これはちょうど変更の例です.

ハンズオン
私はあまりにも言った、私たちの最初の最小限のAPIを実装しましょう.まず第一に、我々はプレビュー版にもあるVisual Studio 2022コミュニティのバージョンをダウンロードする必要がありますlink . 「ASP . NETとWeb開発」機能を追加することで標準的なインストールを行います.

プロジェクトの作成
さあ、最初の最小限のAPIを作成して、最初の最小限のAPIを作成しましょう.
dotnet new web -o dotnet-mininal-api
プロジェクトを作成し、この構造を持つ必要があります.

まず最初に、あなたのプロジェクトに注目してください、それは、以前は、あなたのAPIを持っているための基本的なものであり、以前のバージョンを使用している人のために、あなたは、“startup . cs”ファイルがもはやこのテンプレートのために存在しないことに気づくことができます.

レコード
私たちのモデルを定義しましょう.私はCrecord , これはimmutableオブジェクトで動作するのを許容します.そして、その仕様の他に実装されるのが簡単です、そして、我々が単純なAPIが欲しいので、我々はプログラムの終わりにコードの以下のコードを加えることによって、このリソースを利用します.cs
public record Sales(long Id, DateTime DataTime, string Product, double Price);

データベース接続
私はSQL Serverを使用しているこのプロジェクトのように、私たちはそれへの接続を行いますが、それは別のデータベースである可能性があります、我々はEntity FrameworkコアSQL Server
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
そして、あなたのデータベースに接続するために接続ストリングを変える必要を覚えて、我々はこのコード断片を我々の「プログラム. cs」に加えます.
public class dbContext : DbContex
{    
    public DbSet<Sales> Sales {  get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder options)
        => options.UseSqlServer("Server=YourHost;Database=Company;User Id=YourUser;Password=YourPassword;");

}
では、コンテキストをインスタンス化する必要があります.
builder.Services.AddDbContext<dbContext>();

移動
マイグレーションがどのように働くかを示すので、このステップで簡潔になります.それは記事の目的ではありませんMicrosoft article , しかし、これらのコマンドを端末に順番に実行するには、次のコマンドを実行します.
ツールがインストールされていない場合は、このコマンドを端末で実行します.
dotnet tool install --global dotnet-ef
プロジェクトフォルダ内の端末で、このコマンドを実行してマイグレーションファイルを作成します.
dotnet ef migrations add Initial
すべてがうまくいくなら、「migrations」と呼ばれている十分な十分はあなたのプロジェクトに生成されたスクリプトで存在しなければなりません.エラーが発生した場合は、正しく行を指している場合は接続文字列を確認してください.
最後にこのコマンドを実行してデータベースとそのテーブル構造とフィールドを作成します.
dotnet ef database update
すべてが正しい場合は、この時点では、会社と呼ばれる新しいデータベースを作成し、2つのテーブルを作成、1つの移行を制御するために、別の“販売”と呼ばれる.


サービスの作成
さて、あなたがこれまで来たならば、我々は我々の販売モデルからデータを操作するために、getメソッドを実行しますendpoints それはすでにCの角9に存在しますが、C≧10で改善され、それらを通して直接メソッドシグネチャの中で定義されたURLを通してアクセスされる完全なメソッドを実装できます.
私は記事のコードを入れて、ここでの方法を置くと削除する方法は、記事が多くの情報を持っているが、しかしthis link リポジトリにアクセスすることができますここで説明し、実装し、他のメソッドを使用します.
コンテキストでそれを置くために、私はgetメソッドがIdによって販売を得るために働く方法を示すでしょう.
app.MapGet("/sales/{id}", async (long id, dbContext db) =
{
    Sales sales = await db.Sales.FindAsync(id);


    if(sales != null)
        return Results.Ok(sales);

    return Results.NotFound();
});
MapGetでは、サービスルート“/SERIES/{ ID }”と文字列を追加し、キー間でURLを通じて受け取るパラメータを定義します.
クエリを正常に実行し、検索したIDの結果を見つけない場合は、結果コードまたはコード404でコード200を返します.

エキストラ
あなたが望むならば、あなたはより簡単にAPIをテストするためにSwaggerを加えることができます.


倉庫
以下のリンクを通して完全なプロジェクトでリポジトリにアクセスし、Githubで私を楽しんでフォローしてください.
Repository

結論
コンセプトは非常にシンプルで簡単に実装されていますが、この例を欲しているなら、モデルフォルダをモデルとして使用するときにモデルを分離することができました.私は、この概念が小さくて簡単であると思われた実装のために非常に役に立つことができると思います、しかし、より堅牢なAPIとより多くの規則で、より精巧なテンプレートはより多くの組織をプロジェクトに提供します.

参考文献
From MVC to Minimal APIs with ASP.NET Core 6.0
Building Minimal APIs In .NET 6
Minimal APIs in ASP.NET Core 6.0
読書ありがとう.詳細については、私のネットワーク上で私に従ってください
Github