Apa yang dimaksud dengan API minimal?

Selesai

Membuat API bisa jadi rumit karena perlu mendukung banyak fitur seperti perutean, pembacaan dan penulisan ke penyimpanan data, dan autentikasi. Untuk menghemat waktu, Anda mulai dengan kerangka kerja dan template yang dibangun ke dalam .NET, yang memberikan banyak fitur yang Anda butuhkan. Namun, kerangka kerja tersebut mungkin memerlukan penyiapan yang cukup besar sebelum Anda memiliki dan menjalankan API dasar. Dengan API minimal untuk .NET 6, hal itu bukanlah masalah. Anda dapat memulai hanya dengan beberapa baris.

Untuk mulai menggunakan minimal API, persyaratan utamanya adalah menggunakan minimal .NET 6. Lalu, Anda memerlukan editor teks, seperti Visual Studio atau Visual Studio Code, atau editor teks lain pilihan Anda. Terakhir, Anda dapat menggunakan sistem operasi Windows, macOS, atau Linux.

Apa yang dimaksud dengan API minimal?

Jika Anda telah mengembangkan .NET web API, Anda telah menggunakan pendekatan yang menggunakan pengontrol. Idenya adalah meminta metode kelas pengontrol, yang merepresentasikan berbagai kata kerja HTTP, untuk menjalankan operasi guna menyelesaikan tugas tertentu. Misalnya, GetProducts() akan menampilkan produk dengan menggunakan GET sebagai kata kerja HTTP.

Apa perbedaan antara pendekatan berbasis pengontrol dan API minimal?

  • Streamlined Program.cs: Template untuk API web berbasis pengontrol menghubungkan pengontrol menggunakan metode AddControllers. Selain itu, Swagger akan memberikan dukungan OpenAPI. API Minimal tidak memiliki kabel ini secara default, meskipun Anda dapat menambahkan Swagger jika diinginkan.

  • Perutean terlihat sedikit berbeda: Perutean terlihat sedikit berbeda dibandingkan dengan API web berbasis pengontrol. Di API web, untuk perutean, tulis kode seperti yang ditunjukkan:

    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
        // add my own routes
    });
    

    Dengan API minimal, tambahkan rute langsung di instans app:

    app.MapGet("/todos", await (TodoDb db) => db.Todos.ToListAsync());
    app.MapPost("/todos", await (Todo todo) => {});
    app.MapPut("/todos", (Todo todo) => {});
    app.MapDelete("/todos/{id}", (int id) => {});
    

Fungsionalitas masih ada di sana. Anda masih mengonfigurasikan database, menyiapkan CORS, dan menambahkan autentikasi dengan cara yang kurang lebih sama seperti biasanya.

Jadi, bagaimana Anda memulai?

Membuat API dengan API minimal

Mari kita telusur apa yang akan Anda pelajari dalam modul ini. Ini hanya penjelasan tentang cara kerjanya. Jangan lakukan apa-apa sendiri!

Proyek baru dibuat dengan dotnet new perintah :

dotnet new web -o PizzaStore -f net8.0

PizzaStore yang baru dibuat berisi proyek API.

File yang dihasilkan

File yang dihasilkan sangat mirip dengan yang Anda dapatkan dengan API berbasis pengontrol:

bin/
obj/
appsettings.Development.json
appsettings.json
PizzaStore.csproj
Program.cs

Di dalam PizzaStore.csproj, ada entri seperti ini:

<PropertyGroup>
  <TargetFramework>net8.0</TargetFramework>
  <Nullable>enable</Nullable>
</PropertyGroup>

Kode ini memberi tahu Anda bahwa Anda menggunakan .NET 8.

Memahami kode

Program.cs berisi kode API Anda. Berikut adalah contoh seperti apa kode itu:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();

Jika menggunakan .NET versi sebelumnya, Anda akan mendapati kekurangan pernyataan using. Dengan .NET 6, pengompilasi mencari pernyataan using untuk Anda. Hal itu bukan sesuatu yang harus Anda pedulikan.

Dalam dua baris kode pertama, buat penyusun. Dari builder, buat instans aplikasi app:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

Penyusun memiliki properti Services. Dengan menggunakan properti Services, Anda dapat menambahkan fitur seperti CORS, Entity Framework, atau Swagger. Berikut contohnya:

builder.Services.AddCors(options => {});

Dalam properti Services, beri tahu API bahwa berikut kemampuan yang dapat digunakan. Sebaliknya, instans app digunakan untuk benar-benar menggunakannya. Jadi, Anda dapat menggunakan instans app untuk menyiapkan perutean:

app.MapGet("/", () => "Hello World!");

Anda juga dapat menggunakan instans app untuk menambahkan middleware. Berikut adalah contoh cara Anda akan menggunakan kemampuan seperti CORS:

app.UseCors("some unique string");

Catatan

Middleware biasanya adalah kode yang mencegat permintaan dan melakukan pemeriksaan seperti memeriksa autentikasi atau memastikan klien diizinkan untuk menjalankan operasi berdasarkan CORS. Setelah middleware selesai dijalankan, permintaan sebenarnya dilakukan. Data dibaca atau ditulis ke penyimpanan dan respons dikirim kembali ke klien yang memanggil.

Terakhir, app.Run() memulai API Anda dan menjadikannya diproses untuk permintaan dari klien.

Untuk menjalankan kode, Anda memulai proyek, seperti proyek .NET lainnya, dengan dotnet run . Secara default, yang berarti Anda memiliki proyek yang berjalan di http://localhost:{PORT}, tempat PORT adalah nilai antara 5000 dan 5300.

Menambahkan dokumentasi dengan Swagger

Dokumentasi adalah sesuatu yang Anda inginkan untuk API. Anda menginginkannya untuk diri sendiri, kolega Anda, dan pengembang pihak ketiga yang mungkin ingin menggunakan API. Itu adalah kunci untuk menjaga dokumentasi tetap sinkron dengan API Anda karena dokumentasi tersebut terus berubah. Pendekatan yang tepat adalah mendeskripsikan API Anda dengan cara yang terstandarisasi dan memastikannya melakukan dokumentasi mandiri. Dengan dokumentasi mandiri, kami bermaksud jika kode berubah, dokumentasi itu ikut berubah bersama kode tersebut.

Swagger mengimplementasikan spesifikasi OpenAPI. Format ini menjelaskan rute tetapi juga data yang mereka terima dan produksi. Antarmuka pengguna Swagger adalah kumpulan alat yang merender spesifikasi OpenAPI sebagai situs web dan memungkinkan Anda berinteraksi dengan API Anda melalui situs web.

Untuk menggunakan Swagger dan antarmuka pengguna Swagger dalam API Anda, lakukan dua hal:

  • Instal paket. Untuk menginstal Swagger, Anda menentukan untuk menginstal paket yang disebut Swashbuckle, seperti ini:

    dotnet add package Swashbuckle.AspNetCore --version 6.1.4   
    
  • Konfigurasikan paket tersebut. Setelah paket diinstal, konfigurasikan melalui kode Anda. Tambahkan beberapa entri:

    • Tambahkan namespace. Anda memerlukan namespace nanti saat memanggil SwaggerDoc() dan memberikan informasi header dari API Anda.

      using Microsoft.OpenApi.Models;
      
    • Tambahkan AddSwaggerGen(). Metode ini menyiapkan informasi header di API Anda, seperti apa yang dipanggil dan nomor versinya. Perhatikan bahwa Swagger harus terbatas pada waktu pengembangan, karena dapat menjadi risiko keamanan jika tersedia dalam produksi.

      builder.Services.AddEndpointsApiExplorer();
      if (app.Environment.IsDevelopment())
      {
         builder.Services.AddSwaggerGen(c =>
           {
             c.SwaggerDoc("v1", new OpenApiInfo { Title = "Todo API", Description = "Keep track of your tasks", Version = "v1" });
           });
      
    • Tambahkan UseSwagger() dan UseSwaggerUI(). Dua kode ini memberi tahu proyek API untuk menggunakan Swagger dan juga lokasi untuk menemukan file spesifikasi swagger.json.

         app.UseSwagger();
         app.UseSwaggerUI(c =>
          {
            c.SwaggerEndpoint("/swagger/v1/swagger.json", "Todo API V1");
          });
      } // end of if (app.Environment.IsDevelopment()) block
      

Itu saja yang terlibat dengan membangun API minimal! Memulai proyek dan navigasi ke http://localhost:5000/swagger menampilkan sesuatu seperti ini:

Cuplikan layar contoh Swagger yang menunjukkan AP I yang harus dilakukan.

Apakah Anda siap untuk beberapa kegiatan langsung? Di unit berikutnya, Anda akan membuat API minimal Anda sendiri!