WEBA

ה-SDK של Supabase ל-NET שובר תאימות לאחור

גרסה 8 מאחדת את כל החבילות ומוסיפה הזרקת תלויות תקנית ל-ASP.NET Core, אבל מעבר ה-JSON וזניחת סביבות ישנות ידרשו עבודת מיגרציה אמיתית.

453 מילים25 עובדות אומתו

ניהול חבילות קוד מפוצלות הוא סיוט מוכר לכל מפתח בקאנד. עד לאחרונה, מי שבנה שירותי C# מול Supabase נאלץ לתמרן בין חבילות פנימיות שחיו בעולמות נפרדים, כשלכל רכיב היה קצב חיים משלו. עכשיו החברה החליטה לעשות סדר בכל הבלאגן הזה בבת אחת. ההודעה על שחרור גרסה 8 מציגה מודל עבודה מסונכרן לחלוטין, אבל מביאה איתה שורה של שינויים שוברים שדורשים היערכות בקוד הקיים.

לא הייתי ממהר לשדרג לפני בדיקת מודלים קפדנית.

סוף לבלגן בגרסאות ה-NuGet

המצב הקודם היה מקור תמידי לכאבי ראש בעבודה עם מנהל התלויות. חבילת Gotrue רצה בגרסה 6, רכיב Realtime טיפס לגרסה 7, וחבילת העל של Supabase עמדה בכלל על גרסה 1. כדי לפתור את חוסר ההתאמה הזה, הצוות דילג ישר לגרסה 8.0.0. המהלך נועד להבטיח שכל החבילות יתקדמו מאותה נקודה. מעתה כל הרכיבים משתחררים יחד בסנכרון מלא, כך שברור בדיוק אילו תלויות מתאימות זו לזו.

במקביל, כל הפרויקטים רוכזו במאגר יחיד בשם supabase-community/supabase-csharp באתר GitHub. המאגרים הישנים והמפוצלים הועברו למצב קריאה בלבד ולא יקבלו עדכונים נוספים. איחוד כל החבילות למאגר יחיד תחת גרסה 8 מיישר קו עם עולם ה-NET ומבטל תקלות סנכרון בין הרכיבים.

Moving from v1.x.x to v8.0.0, in one go, is quite a bump and unusual. It was our only option to guarantee lockstep-versioning.Guillaume Faas בבלוג ההנדסה של Supabase

הזרקת תלויות מובנית ב-ASP.NET

השינוי הארכיטקטוני המרכזי מגיע בדמות חבילת הרחבה חדשה לחלוטין. החבילה Supabase.Extensions.DependencyInjection מספקת חיבור ישיר לקונטיינר השירותים המובנה. מפתחים שעובדים בסביבת ASP.NET Core יכולים לרשום את הלקוח ישירות בקובץ ההגדרות הראשי של המערכת בלי לכתוב מעטפות מותאמות אישית.

הממשק החדש מתבסס על IHttpClientFactory לניהול מחזור החיים של חיבורי HTTP, מה שמונע דליפת חיבורים בעומסים גבוהים. בנוסף, כל חבילות השירות כוללות כעת מנגנון ניסיונות חוזרים עם השהיה מובנית ומתכווננת, כך שהקוד עמיד יותר לנפילות רשת רגעיות.

מה יישבר לכם בקוד

הסדר החדש מגיע עם מחיר ברור בצד של תאימות לאחור. המעבר מספריית Newtonsoft.Json המוכרת לספריית System.Text.Json המובנית הוא העיקרי שבהם. אם המודלים שלכם כללו תכונות סריאליזציה מותאמות או ממירי JSON ייעודיים, הקוד ידרוש שכתוב והתאמה למחלקות החדשות לפני שתוכלו להריץ בדיקות תקינות.

שינוי נוסף מציב גבול ברור לסביבות ריצה. לפי ההודעה, כל החבילות מכוונות כעת ל-netstandard2.1, ובחברה מציינים שמי שהשתמש בחבילת העל כבר היה על היעד הזה. מנגד, הלקוח תומך כעת גם במפתחות API סודיים וציבוריים ומאפשר הפרדה טובה יותר בין סביבות עבודה.

זה שווה את זה רק אם האפליקציה כבר כתובה בגרסאות NET מודרניות.

קהילתי ולא רשמי עם חוזה

למרות ההכרזה הרשמית בבלוג, כדאי לשים לב לפרטים הקטנים של ניהול הפרויקט. קוד הפרויקט והספרייה המרכזית מתארחים תחת ארגון supabase-community ב-GitHub, והמאגרים הישנים הוסרו מדף הקהילה. לא פורסם מידע לגבי התחייבות רשמית לתמיכת שירות ארגונית ברמת המוצר לספרייה הזו.

אם אתם עובדים מול בסיס הנתונים ישירות דרך EF Core ומתחברים ב-Npgsql בלי לגעת בשכבת ה-REST או ב-Realtime, השדרוג הזה פשוט לא ישפיע עליכם. גם בזווית המקומית אין בשורות מיוחדות: התמיכה בעברית ממשיכה להישען על הגדרות ה-PostgreSQL בשרת ללא מאפיינים מותאמים לישראל.

השוואת מאפייני ה-SDK של Supabase ל-NET לפי גרסה
מאפייןבגרסאות הקודמות (v1-v7)בגרסה 8 החדשה
מבנה גרסאותגרסאות שונות לכל רכיב (Realtime v7, Gotrue v6)גרסה 8.0.0 אחודה ומסונכרנת לכל החבילות
מאגרי קודמאגרים נפרדים לכל ספרייה ב-GitHubמאגר יחיד (Monorepo) תחת supabase-community
ספריית סריאליזציהNewtonsoft.JsonSystem.Text.Json
הזרקת תלויותלא פורסםחבילת Supabase.Extensions.DependencyInjection
יעד סביבת ריצהnetstandard2.1 בחבילת העלnetstandard2.1 לכל החבילות

השדרוג נותן שקט תעשייתי למי שמקים שירות חדש, אבל דורש עבודה אם יש לכם מחלקות נתונים ותיקות. בדקו היטב את ממירי המידע לפני שאתם מעדכנים את קובץ התלויות בפרודקשן.

מה לעשות עכשיובדקו את ממירי ה-JSON והתאימות ל-netstandard2.1 בסביבת פיתוח לפני עדכון חבילות ה-NuGet בפרויקט.

מקורות

הידיעה נכתבה מהמקורות שלמעלה בתאריך הפרסום, וכל טענה בה נבדקה מולם. מצאתם טעות? כתבו.

מה שואלים על זה

האם השדרוג לגרסה 8 דורש שינויים בקוד הסריאליזציה הקיים?

כן, המעבר ל-System.Text.Json עלול לדרוש התאמת שמות מאפיינים וממירים מותאמים אישית שהוגדרו עבור Newtonsoft.Json.

האם אפשר להשתמש ב-SDK החדש בפרויקט .NET Framework ישן?

לפי ההודעה, גרסה 8 מכוונת ל-netstandard2.1, ובחברה מציינים כי משתמשי חבילת העל כבר היו על יעד זה.

איך מחברים את ה-SDK למכולת ה-IoC של ASP.NET Core?

מתקינים את החבילה Supabase.Extensions.DependencyInjection ורושמים את הלקוח ישירות דרך שירותי האפליקציה ב-Program.cs.

האם Supabase מספקת תמיכת SLA מסחרית לספריית C#?

לא פורסם מידע על התחייבות רשמית לתמיכת SLA כחלק מחוזה תמיכה עבור ספריית ה-C# שמתארחת תחת supabase-community.