Membuat project ASP.NET Core Web API pertama adalah langkah awal untuk membangun backend yang bisa diakses oleh aplikasi client, baik itu aplikasi mobile, single-page application, maupun layanan lain yang berkomunikasi lewat HTTP menggunakan format data seperti JSON.
Dotnet CLI menyediakan template webapi yang langsung menghasilkan struktur project lengkap dengan controller contoh, konfigurasi Swagger untuk dokumentasi API otomatis, dan pengaturan dasar yang siap dijalankan tanpa konfigurasi tambahan.
Artikel ini membahas langkah demi langkah membuat project Web API baru, memahami struktur file yang dihasilkan, serta cara menguji endpoint API tersebut menggunakan Swagger UI yang disediakan secara otomatis.
Membuat Project dengan Template webapi
Template webapi langsung menghasilkan project siap jalan
Memahami Controller dan Action Method
Controller dasar dengan satu endpoint GET
Menguji API dengan Swagger UI
Swagger UI memberi cara cepat menguji API tanpa tool tambahan
Menjalankan dengan Hot Reload untuk Produktivitas
dotnet watch mempercepat siklus development
Selain template webapi standar, dotnet CLI juga menyediakan flag tambahan seperti --use-controllers atau --minimal untuk memilih gaya minimal API tanpa controller class, sebuah pendekatan yang semakin populer pada project kecil hingga menengah karena mengurangi boilerplate sekaligus tetap mempertahankan seluruh kemampuan routing dan dependency injection yang sama.
Memahami appsettings dan launchSettings pada Project Baru
launchSettings.json menentukan port dan environment saat debug di Visual Studio/dotnet run
Ketika project ASP.NET Core Web API baru dibuat lewat template bawaan, dua file konfigurasi langsung tersedia: appsettings.json dan launchSettings.json. Keduanya sering tertukar fungsinya oleh pemula. appsettings.json berisi konfigurasi aplikasi yang dibaca saat runtime dan ikut dideploy ke server, sedangkan launchSettings.json hanya dipakai oleh tooling development (Visual Studio, dotnet run, Rider) untuk menentukan port lokal dan variabel environment saat debugging, dan tidak pernah ikut masuk ke hasil publish.
Variabel ASPNETCORE_ENVIRONMENT yang didefinisikan di launchSettings.json itulah yang menentukan file konfigurasi mana yang akan digabung saat aplikasi start, misalnya appsettings.Development.json akan menimpa nilai di appsettings.json dasar ketika environment bernilai Development. Di server production, nilai ini biasanya diset lewat environment variable sistem operasi atau konfigurasi hosting, bukan lewat launchSettings.json yang memang tidak pernah sampai ke server.
Memahami urutan pemuatan konfigurasi ini penting sejak project pertama kali dibuat, karena kesalahan umum pemula adalah menaruh connection string production langsung di appsettings.json lalu bingung mengapa nilai tersebut masih terpakai di server padahal sudah ada appsettings.Production.json; urutan override konfigurasi di ASP.NET Core berjalan dari file paling umum ke file paling spesifik sesuai environment.
Menambahkan Swagger/OpenAPI untuk Dokumentasi dan Uji Coba API
Swagger UI aktif hanya pada environment Development
Project Web API baru yang dibuat lewat template dotnet new webapi biasanya sudah menyertakan package Swashbuckle.AspNetCore secara otomatis, yang menghasilkan dokumentasi OpenAPI dari seluruh controller dan DTO yang ada di project. Dokumentasi ini dibaca langsung dari signature method, atribut [HttpGet]/[HttpPost], dan tipe parameter, sehingga tidak perlu menulis dokumentasi API secara manual yang mudah basi ketika kode berubah. Skema JSON yang dihasilkan di endpoint /swagger/v1/swagger.json juga bisa langsung diimpor ke tools eksternal seperti Postman atau dipakai untuk membangkitkan client SDK secara otomatis di sisi frontend.
Swagger UI yang muncul di endpoint /swagger memberi antarmuka interaktif untuk mencoba setiap endpoint langsung dari browser tanpa perlu Postman, termasuk mengisi body request, melihat skema response, dan menguji endpoint yang membutuhkan header Authorization. Fitur Try it out ini sangat membantu saat tahap pengembangan awal karena developer bisa langsung memverifikasi perilaku API begitu controller baru dibuat. Komentar XML pada method controller, jika diaktifkan lewat GenerateDocumentationFile di csproj, juga akan muncul sebagai deskripsi tambahan di halaman Swagger tanpa konfigurasi lain.
Praktik umum adalah membatasi UseSwaggerUI() hanya aktif pada environment Development lewat pengecekan app.Environment.IsDevelopment(), karena mengekspos dokumentasi API lengkap beserta skema data di production berisiko membocorkan detail struktur internal sistem ke pihak yang tidak berkepentingan. Untuk API yang memang perlu didokumentasikan secara publik, biasanya dipakai domain atau subdomain terpisah dengan autentikasi tambahan, bukan endpoint swagger bawaan yang sama dengan environment development. Tim yang tetap membutuhkan swagger di production umumnya menambahkan proteksi tambahan seperti basic authentication khusus pada path tersebut.
Menambahkan API Versioning agar Perubahan Kontrak Tidak Merusak Klien Lama
Pada project baru yang masih kecil, versioning sering dianggap belum perlu karena hanya ada satu klien yang memanggil API tersebut. Namun begitu API mulai dikonsumsi oleh lebih dari satu pihak, misalnya aplikasi mobile, aplikasi web internal, dan sistem partner sekaligus, perubahan kontrak endpoint bisa berisiko mematahkan klien yang belum sempat diperbarui mengikuti perubahan terbaru. Library resmi Asp.Versioning menyediakan skema versi lewat segmen URL, query string, atau header kustom tanpa harus menulis logika routing manual untuk membedakan setiap versi secara terpisah.
ReportApiVersions berguna untuk menampilkan versi yang didukung lewat response header, sehingga tim konsumen API dapat memeriksa versi mana saja yang masih aktif dan mana yang sudah mulai ditinggalkan. Menambahkan skema versioning sejak awal, meski baru ada satu versi yang tersedia, jauh lebih mudah dibanding memasangnya belakangan setelah banyak controller sudah terlanjur dibuat tanpa mengikuti pola penomoran versi, yang akan memaksa refactor route di banyak tempat sekaligus.
Kesalahan Umum yang Sering Terjadi
Lupa Menambahkan Atribut HttpGet/HttpPost pada Action Method
Action method yang tidak ditandai atribut HTTP verb yang sesuai bisa menyebabkan konflik routing atau method tersebut tidak bisa diakses sesuai ekspektasi, terutama jika controller memiliki beberapa method dengan nama mirip.
Mengabaikan Swagger Hanya Aktif di Mode Development
Swagger UI secara default hanya aktif saat aplikasi berjalan dalam environment Development; banyak developer bingung mengapa /swagger menghasilkan 404 setelah deploy ke production karena environment-nya sudah berubah.
Tidak Memahami Perbedaan ControllerBase dan Controller
Untuk Web API murni tanpa view, sebaiknya mewarisi dari ControllerBase, bukan Controller yang menyertakan fitur tambahan untuk rendering view MVC yang tidak dibutuhkan pada API.
Kapan Pendekatan Ini Tidak Cocok Dipakai
Template webapi bawaan memberikan starting point yang cepat dengan konfigurasi dasar yang masuk akal, namun untuk project production yang lebih kompleks, struktur ini biasanya perlu disesuaikan lebih lanjut dengan pola arsitektur seperti Clean Architecture yang akan dibahas pada artikel terpisah.
Swagger memberikan kemudahan dokumentasi dan pengujian otomatis tanpa effort tambahan, namun untuk API yang benar-benar kompleks dengan banyak skenario autentikasi, terkadang masih perlu dilengkapi dengan tool pengujian API eksternal seperti Postman untuk skenario yang lebih rumit.
Ringkasan
Membuat project ASP.NET Core Web API pertama relatif cepat berkat template bawaan dotnet CLI yang sudah menyertakan Swagger untuk dokumentasi interaktif. Pahami peran controller, action method, dan atribut routing sebagai fondasi sebelum melangkah ke topik lebih lanjut seperti middleware dan dependency injection.
Seri Belajar .NET Core:
← Sebelumnya: Pengenalan ASP.NET Core dan Perbedaannya dengan ASP.NET Web Forms
→ Selanjutnya: Memahami Middleware pada ASP.NET Core