Ikhtisar
Pendahuluan
Dokumen ini memberikan ikhtisar komprehensif tentang layanan backend Ravenxcope.Backend ASP.NET Core. Layanan ini adalah API pusat untuk platform pusat pertahanan RavenXcope, yang bertanggung jawab atas autentikasi, manajemen organisasi dan pengguna, kontrol akses berbasis peran (RBAC), orkestrasi siklus hidup sensor, dan integrasi analitik. Layanan ini mengikuti arsitektur berlapis dengan pemisahan kekhawatiran yang jelas di seluruh lapisan API, Aplikasi, Domain, dan Infrastruktur.
Pola Arsitektur
Backend mengikuti Arsitektur Berlapis dengan controller tipis yang menangani transport API, kelas layanan khusus yang menangani logika bisnis, entitas yang mewakili model data, dan repositori di bawah infrastruktur yang menangani persistensi. Integrasi layanan eksternal (Redis, InfluxDB, OpenSearch, Ansible) dibungkus dalam kelas layanan infrastruktur. Kekhawatiran lintas-potong (cross-cutting) seperti pemutus sirkuit (circuit breaker), pembatasan laju (rate limiting), dan penanganan pengecualian global diimplementasikan melalui middleware dan layanan bersama.
Struktur Proyek
Tumpukan Teknologi
| Kategori | Teknologi | Versi | Tujuan |
|---|---|---|---|
| Runtime | .NET | 10.0 | Runtime aplikasi |
| Framework | ASP.NET Core | 10.0 | Framework Web API |
| ORM | Entity Framework Core | 9.0.1 | Akses database dan migrasi |
| Database | PostgreSQL (Npgsql) | 9.0.4 | Database relasional utama |
| Caching | Redis (StackExchange.Redis) | 2.10.1 | Blacklist token & penyimpanan sesi |
| Pencarian/Analitik | OpenSearch | 1.8.0 | Pengambilan log dan analitik |
| Deret Waktu | InfluxDB | 4.18.0 | Data metrik dan heartbeat |
| Hashing Kata Sandi | BCrypt.Net-Next | 4.0.3 | Hashing kata sandi yang aman |
| Logging | Serilog | 9.0.0 | Logging terstruktur |
| JWT | Microsoft.AspNetCore.Authentication.JwtBearer | 10.0.0 | Autentikasi token |
| Dokumentasi API | Swashbuckle (Swagger) | 6.9.0 | Dokumentasi OpenAPI |
| gRPC | Grpc.AspNetCore | 2.70.0 | Titik akhir pemeriksaan kesehatan sensor |
Prinsip Desain Utama
-
Fail-Fast pada Konfigurasi: Layanan memvalidasi semua kunci konfigurasi yang diperlukan saat startup dan langsung melempar pengecualian jika ada yang hilang atau berisi nilai placeholder.
-
Fail-Fast pada Dependensi: Sebelum melayani lalu lintas apa pun, layanan memverifikasi konektivitas ke PostgreSQL, Redis, InfluxDB, dan OpenSearch menggunakan pemeriksaan kesehatan berbasis percobaan ulang (retry).
-
Komposisi Startup melalui Ekstensi: Semua tanggung jawab startup (registrasi layanan, pipa middleware, pemeriksaan kesehatan, migrasi) diisolasi dalam metode ekstensi khusus di direktori
Extensions/, menjagaProgram.cstetap bersih dan deklaratif. -
Pola Typed Options: Semua bagian konfigurasi diikat ke kelas opsi ber-tipe kuat (misalnya,
PostgresqlSettingsOptions,JwtSettingsOptions,InfluxDbOptions) menggunakanIOptions<T>, menghindari pembacaan konfigurasi berbasis string yang tersebar. -
Manajemen Stempel Waktu Otomatis:
ApplicationDbContextmengesampingkanSaveChangesdanSaveChangesAsyncuntuk secara otomatis mengatur stempel waktuCreatedAtdanUpdatedAtpada semua entitas yang dilacak. -
Izin Benih melalui Migrasi: Izin inti (CRUD untuk Pengguna, Sensor, Peran, Aset, dan edit Organisasi) ditanamkan melalui EF Core
HasDatadiOnModelCreating, memastikan izin tersebut ada di setiap lingkungan. -
JWT dengan Blacklisting Token dan Refresh Token: Autentikasi menggunakan token JWT simetris dengan acara
OnTokenValidatedyang memeriksa Redis untuk pencabutan token. Refresh token dikeluarkan saat login/register dan disimpan di Redis dengan TTL 30 hari. -
Akses Cakupan Organisasi: Pengguna, sensor, aset, dan peran dicakup ke organisasi. Controller mengekstrak ID organisasi dari klaim JWT untuk memfilter akses data.
-
Controller Tipis dengan Lapisan Layanan: Semua controller mendelegasikan logika bisnis ke kelas layanan khusus (misalnya,
IAuthService,ISensorsService,IAssetService). Controller hanya menangani masalah transport HTTP. -
Amplop Respons Standar: Semua titik akhir mengembalikan respons melalui
ApiEnvelope.Success()/ApiEnvelope.Error(), menyediakan kontrak{ success, data, errors, traceId }yang konsisten. -
Penanganan Pengecualian Global: Middleware penangan pengecualian global (
GlobalExceptionHandlingExtensions) menangkap pengecualian yang tidak tertangani dan memetakannya ke kode status HTTP yang sesuai melaluiApiExceptionMapper, menghilangkan blok try-catch di controller. -
Pembatasan Laju (Rate Limiting): Titik akhir autentikasi (login, register) dilindungi oleh pembatas laju jendela tetap (fixed-window) untuk mencegah serangan brute-force.
-
Panggilan Eksternal yang Resilien:
ResilientHttpServicemenyediakan pola pemutus sirkuit (circuit breaker) dan percobaan ulang (retry) untuk panggilan HTTP eksternal (misalnya, Ansible), mencegah kegagalan beruntun.
Jaminan Startup
Saat startup, layanan melakukan langkah-langkah berikut dalam urutan yang ketat:
- Menginisialisasi logging terstruktur Serilog dari appsettings
- Memvalidasi semua kunci konfigurasi yang diperlukan (melempar pengecualian jika ada nilai yang hilang/placeholder)
- Mengeluarkan peringatan jika rahasia JWT lebih pendek dari 32 karakter
- Mendaftarkan semua layanan DI, opsi ber-tipe, dan dependensi middleware
- Membangun koneksi Redis (terhubung secara aktif selama registrasi DI)
- Mengeksekusi pemeriksaan kesehatan dependensi dengan logika retry untuk PostgreSQL, Redis, InfluxDB, dan OpenSearch
- Menerapkan migrasi database EF Core secara otomatis ketika
Database:AutoMigratebernilaitrue - Mengonfigurasi pipa middleware HTTP dan memetakan controller + titik akhir gRPC
- Mulai menerima lalu lintas HTTP dan gRPC
Model Penyebaran
Backend dirancang untuk berjalan dalam tumpukan kemasan kontainer (containerized stacks) sebagai bagian dari penyebaran Docker Compose pusat pertahanan. Ia mengharapkan variabel lingkungan (menggunakan konvensi garis bawah ganda ASP.NET Core) untuk mengisi placeholder appsettings.json saat runtime.
- Port yang diekspos Docker:
5144 - Titik masuk:
dotnet Ravenxcope.Backend.dll - Gambar basis:
mcr.microsoft.com/dotnet/aspnet:10.0 - Gambar build:
mcr.microsoft.com/dotnet/sdk:10.0