ASPでWeb APIを作成する方法.NETとMongoDB


このチュートリアルでは、ASP . NETでWeb APIを作成する方法を学びます.NETとMongoDB.ムービーデータベース上でCRUD操作を可能にするAPIを作成します.

何がMongoDBですか?


MongoDBはドキュメントベースのNOSQLデータベースです.MongoDBは、テーブル内のデータを格納するリレーショナルデータベースとは異なり、データをコレクションにまとめたドキュメントとして格納します.

工具

  • Visual Studio 2022
  • Postman
  • MongoDB
  • MongoDB Compass
  • データベースの作成


    私は、ローカルコンピュータでMongoDBで働くつもりです.MongoDBサーバーのインスタンスをインストールするには、次のリンクを実行します.
    Install MongoDB

    If you don't want to use MongoDB on your local machine, you can always use MongoDB Atlas. MongoDB Atlas is a database as a service, and you can try it for free.

  • MongoDBコンパスを起動します.
  • をクリックして“接続”ボタンをローカルサーバーに接続します.
  • サーバーに接続したら、「データベースを作成」ボタンをクリックして新しいデータベースを作成します.
  • ダイアログで、データベース名をMovieSDBに設定し、コレクション名をMovieSectionに設定します.
  • データベースを生成するボタンをクリックします.
  • ASPを作成するNETアプリケーション

  • ビジュアルスタジオ2022を起動します.
  • file -> new ->プロジェクトに移動します.
  • を選択します.次のボタンをクリックします.
  • プロジェクトの名前をMovieSapiに設定します.
  • 絹篩で篩うたよう.フレームワークとしてNET 6とHttpsを使用して構成を選択解除し、[作成]ボタンをクリックしてプロジェクトを生成します.
  • MongoDBのインストール。ネットドライバ


    これは公式です.MongoDBのためのネットドライバ、それはMongoDBに接続するのに役立ちます.
  • Visual StudioでnugetパッケージマネージャーUIを開きます.
  • MongoDBの検索ドライバの選択とインストール.
  • 構成


  • MongoDBに接続するには、接続文字列、データベース名、およびコレクション名のような詳細が必要です.これらの詳細は、アプリケーション構成ファイルに保存します.
    "MoviesDatabaseSettings": {
      "ConnectionString": "Your connection string to MongoDB",
      "DatabaseName": "MoviesDb",
      "MoviesCollectionName": "Movies"
    }
    
    
  • 💡 データベースの接続文字列を取得するには、MongoDBコンパスから切断し、接続文字列がアプリケーションのホームウィンドウに表示されます.

  • アプリケーションでこのセクションを読むには、オプションパターンを使用します.MoviesDatabaseSettingsという名前の新しいクラスを追加します.
    public class MoviesDatabaseSettings
    {
        public string ConnectionString { get; set; } = string.Empty;
        public string DatabaseName { get; set; } = string.Empty;
        public string MoviesCollectionName { get; set; } = string.Empty;
    }
    
    
    ASP .このクラスに「MoviesDatabaseSettings」セクションをマップします.

  • プログラムで.CSは、Webアプリケーションがインスタンス化された後、依存関係インジェクションコンテナにMoviesDatabaseSettingsクラスを登録します.
    builder.Services.Configure<MoviesDatabaseSettings>(builder.Configuration.GetSection("MoviesDatabaseSettings"));
    
    

    Make sure, you install the following Nuget package: Microsoft.Extensions.Options


  • モデルの作成


    以下のような新しいクラスを追加します.
     public class Movie
     {
         [BsonId]
         [BsonRepresentation(MongoDB.Bson.BsonType.ObjectId)]
         public string Id { get; set; }
         public string Title { get; set; }
         public int Year { get; set; }
         public string Summary { get; set; } = null;
         public List<string> Actors { get; set; }
     }
    
    
  • idプロパティは、BSONID属性でプライマリキーとしてマークされます.
  • MongoDBは、ObjectID構造体の主キーを格納し、MongoDBに文字列からObjectIDへの変換を行う必要があることを通知するには、idプロパティも属性bson表現で修飾されます.
  • サービスのCRUD操作の作成


  • 新しいクラスを追加し、次のコードを貼り付けます.
    public class MoviesService
    {
        private readonly IMongoCollection<Movie> _movies;
    
        public MoviesService(IOptions<MoviesDatabaseSettings> options)
        {
            var mongoClient = new MongoClient(options.Value.ConnectionString);
    
            _movies = mongoClient.GetDatabase(options.Value.DatabaseName)
                .GetCollection<Movie>(options.Value.MoviesCollectionName);
        }
    
        public async Task<List<Movie>> Get() =>
            await _movies.Find(_ => true).ToListAsync();
    
        public async Task<Movie> Get(string id) =>
            await _movies.Find(m => m.Id == id).FirstOrDefaultAsync();
    
        public async Task Create(Movie newMovie) =>
            await _movies.InsertOneAsync(newMovie);
    
        public async Task Update(string id, Movie updateMovie) =>
            await _movies.ReplaceOneAsync(m => m.Id == id, updateMovie);
    
        public async Task Remove(string id) =>
            await _movies.DeleteOneAsync(m => m.Id == id);
    }
    
    
    MongoClientは、データベース操作の実行に責任があります.

  • 依存性インジェクションコンテナでサービスを登録します.
    builder.Services.AddSingleton<MoviesService>();
    
    
    MoviesserviceはサービスがMongoClientに依存するので、Singletonとして登録されます、それはSingletonとしてMongoClientを使うことを勧められます.
  • CRUD操作のエンドポイントの作成


    プログラムを更新します.以下のようになります.
    using MoviesAPI.Data;
    
    var builder = WebApplication.CreateBuilder(args);
    builder.Services.Configure<MoviesDatabaseSettings>(builder.Configuration.GetSection("MoviesDatabaseSettings"));
    builder.Services.AddSingleton<MoviesService>();
    var app = builder.Build();
    
    app.MapGet("/", () => "Movies API!");
    
    app.MapGet("/api/movies", async(MoviesService moviesService) => await moviesService.Get());
    
    app.MapGet("/api/movies/{id}", async(MoviesService moviesService, string id) =>
    {
        var movie = await moviesService.Get(id);
        return movie is null ? Results.NotFound() : Results.Ok(movie);
    });
    
    app.MapPost("/api/movies", async (MoviesService moviesService, Movie movie) =>
    {
        await moviesService.Create(movie);
        return Results.Ok();
    });
    
    app.MapPut("/api/movies/{id}", async(MoviesService moviesService, string id, Movie updatedMovie) =>
    {
        var movie = await moviesService.Get(id);
        if (movie is null) return Results.NotFound();
    
        updatedMovie.Id = movie.Id;
        await moviesService.Update(id, updatedMovie);
    
        return Results.NoContent();
    });
    
    app.MapDelete("/api/movies/{id}", async (MoviesService moviesService, string id) =>
    {
        var movie = await moviesService.Get(id);
        if (movie is null) return Results.NotFound();
    
        await moviesService.Remove(movie.Id);
    
        return Results.NoContent();
    });
    
    app.Run();
    
    
    作成、読み取り、更新、および削除のアクションは、ポスト、get、put、deleteなどのHTTP動詞にマップされます.
    私は、各エンドポイントを作成するために、最小限のAPI構文を使用しています.HTTP動詞では、ルートへのリクエストを処理するルートとルートハンドラーを宣言する必要があります.Remote Injection ContainerでMoviesServiceを登録したので、各ルートハンドラーに注入できます.

    APIのテスト


    あなたがインスタンスのために新しい映画を加えたいならば.
  • アプリケーションのデバッグを開始するか、F 5キーを押します.
  • Webブラウザで表示されるURLをコピーします.
  • ランチポストマン.
  • HTTPリクエストとしてポストを選択する新しいリクエストを作成します.
  • アドレスバーで、URLをペーストして、/API/movieを加えてください.
  • 本体セクションで、次のJSONをペイロードとして貼り付けます.
  •     {
            "Title":  "The Shawshank Redemption",
            "Year":  1994,
            "Summary":  "Banker Andy Dufresne is arrested for killing his wife and her lover. After a hard adjustment, he tries to improve the conditions of the prison and to give hope to his companions.",
            "Actors":  ["tim robbins","morgan freeman"]
        }
    
    
  • ボタンをクリックします.
  • 応答として200のステータスコードを得るべきです.
  • ハッピーコーディング!


    ここではビデオチュートリアルです