תיאור פרויקט
Insurance Management API
כללים עסקיים וכתיבה צפויה של נתונים ב-API אישי ב-.NET.
המשימה
לנהל לקוחות ומחזור חיי פוליסות תוך טיפול בבקשות כפולות ובעדכונים מתנגשים.
התפקיד שלי
בפרויקט האישי הזה מימשתי את ה-backend, הכללים העסקיים ובדיקות ה-API.
הפתרון
API ב־.NET 8 לניהול לקוחות ומחזור החיים של פוליסות רכב, בריאות וחיים. מבוסס על כללים עסקיים, שגיאות ברורות וכתיבה אמינה של נתונים.
לראות בפעולה
API לניהול
ביטוח
API ב־.NET 8 לניהול לקוחות ומחזור החיים של פוליסות רכב, בריאות וחיים. מבוסס על כללים עסקיים, שגיאות ברורות וכתיבה אמינה של נתונים.
פרויקט אישי · מימוש backend, כללים עסקיים ובדיקות API.
נסו את הדוגמה האינטראקטיבית לצפייה במאגר הקודבקשה חוזרת מחזירה את אותה פוליסה. המערכת מציפה שינויים סותרים ושומרת תיעוד של הפעולות בפוליסה.
פרטים טכניים
- 01APIאימות נתונים · אימות זהות · HTTP
- 02דומיין ושירותיםכללי פוליסות · מחזור חיים · אידמפוטנטיות
- 03שמירת נתוניםEF Core · אילוצי SQL · אירועי ביקורת
409עדכונים מיושנים ובקשות סותרות מחזירים שגיאות מפורשות.
החלטות הנדסיות
בקשות חוזרות בטוחות
נקודות הקצה להנפקה ולביטול מקבלות מפתח אידמפוטנטיות. אותו מפתח ואותם נתונים מחזירים את התוצאה המקורית; נתונים שונים מחזירים שגיאת התנגשות.
כללים בשתי שכבות
ללקוח יכולה להיות לכל היותר פוליסת רכב פעילה אחת. הכלל נאכף גם בבדיקות בשירות וגם באינדקס SQL ייחודי מסונן.
עדכונים במקביל
טוקן גרסת רשומה מזהה עדכונים מיושנים לפוליסה ומחזיר שגיאת התנגשות במקום לדרוס שינוי אחר ללא התרעה.
מחזור חיים שניתן לעקוב אחריו
הנפקה, עדכון וביטול של פוליסות יוצרים אירועי ביקורת. ביטול שומר את הרשומה, ולא ניתן לעדכן פוליסה שבוטלה.
בדיקות וחוזי API
בדיקות נקודות קצה ב־xUnit בודקות מפתחות אידמפוטנטיות סותרים, בקשות חוזרות, אימות נתונים, הרשאות JWT והגבלת קצב בקשות.
הקוד שמאחורי בקשה חוזרת בטוחה
לפני יצירת פוליסה נוספת, השירות בודק אם הפעולה והמפתח כבר קיימים. הוא מאמת את טביעת הבקשה ומחזיר את הרשומה המקורית.
var existingIdempotency = await GetIdempotencyAsync(operation, idempotencyKey, cancellationToken);
if (existingIdempotency is not null)
{
// Same operation+key should return the original result unless payload changed.
ValidateFingerprint(existingIdempotency, idempotencyFingerprint);
return await GetByIdAsync(existingIdempotency.ResponseEntityId, cancellationToken);
}לצפות בקוד השירות המלאקטע מתוך PolicyService.cs. השירות המלא מטפל גם בתוכן בקשה סותר ובהוספות מקבילות.
אתגר הנדסי קטן
לחצתם על ״שמירה״ פעמיים. מה אמור לקרות?
הבקשה הראשונה הצליחה, אבל התשובה אבדה. אתם מנסים שוב עם אותו מפתח ואותם נתונים.
בחרו תשובה ואז ראו את ההתנהגות בפעולה.
סימולציה להמחשה עם נתוני דוגמה. ללא קריאות ל-API אמיתי.
לצפייה בדוגמת הבקשה החוזרת
דוגמה הנדסית אינטראקטיבית
בקשות חוזרות בטוחות.
בלי פוליסות כפולות.
אם תשובה אובדת, לקוח עלול לשלוח שוב את אותה בקשה. בדוגמה הזו המערכת מחזירה את הפוליסה הקיימת במקום ליצור כפילות.
הדמיה של כלל האידמפוטנטיות בפרויקט. משתמשת בנתונים לדוגמה, ללא קריאות API אמיתיות.
ראו איך הבקשה מתקדמת
צרו פוליסה, נסו שוב או שנו את הפרמיה כדי לעקוב אחרי התוצאה.
פוליסות שנוצרו 0
POST /api/customers/{id}/policies{
"type": "Health",
"premium": 100
}
שלחו את הבקשה הראשונה ליצירת פוליסה לדוגמה.
בקשה חוזרת זהה אמורה להחזיר את הפוליסה המקורית.
מה נבדק ומהן המגבלות
הדוגמה האינטראקטיבית היא סימולציה בדפדפן. היא אינה פונה ל-API מתארח, ופריסה מלאה עם SQL Server לא נבדקה בתצוגה הזו.