הגברת ביצועים ויעילות: משפרים אפליקציות React עם GraphQL מעל REST APIs

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

בין הפתרונות לאתגרים אלו היא החלטה לאמץ את השימוש ב־GraphQL עם אפליקציות React. אם לשרת האחורי שלך יש מספר רב של נקודות קצה של REST, אז הכנסת שכבת GraphQL שקוראת פנימית את נקודות הקצה של ה־API שלך יכולה לשפר את האפליקציה שלך מייתר-קריאה ולזרום את האפליקציה שלך בחזית העבודה. במאמר זה, תמצא כיצד להשתמש בזה, היתרונות והחסרונות של הגישה הזו, אתגרים שונים, וכיצד לטפל בהם. נחקור גם יותר בעומק בדוגמאות מעשיות של כיצד GraphQL יכולה לעזור לך לשפר את הדרכים שבהן אתה עובד עם הנתונים שלך.

יתר-קריאה ב־REST APIs

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

שקול דף פרופיל משתמש שבו דרוש להציג את שם ואת אימייל של המשתמש בלבד. עם API טיפי, קריאת הנתונים של המשתמש עשויה להיראות כך:

JavaScript

 

תגובת ה־API תכיל נתונים מיותרים:

JSON

 

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

GraphQL כפתרון

GraphQL פותר בעיה זו באמצעות הרשאת לקליינטים לבקש בדיוק את הנתונים שהם זקוקים אליהם. על ידי שילוב שרת GraphQL באפליקציה שלך, אתה יכול ליצור שכבת גישה למידע גמישה ויעילה שמתקשרת עם ה- REST API הקיימים שלך.

איך זה עובד

1. התקנת שרת GraphQL

אתה מכניס שרת GraphQL שמשמש כאמצעי בין קרן ה- React שלך וה- REST API.

2. הגדרת סכמה

אתה מגדיר סכמת GraphQL שמציינת את סוגי הנתונים והשאילתות שנדרשים על ידי קרן ה- frontend שלך.

3. יישום מקרים פתרון

אתה מיישם מקרי פתרון בשרת ה- GraphQL שמביאים נתונים מה- REST API ומחזירים רק את השדות הדרושים.

4. אינטגרציה עם הקדמה

אתה מעדכן את האפליקציה שלך ב- React כך שתשתמש בשאילתות GraphQL במקום בקריאות ישירות ל- REST API.

גישה זו מאפשרת לך לייעל את אחזור הנתונים מבלי לעבור על תשתיות השרת שלך שכבר קיימות.

יישום GraphQL באפליקציה של React

בואו נסתכל על כיצד להקים שרת GraphQL ולשלב אותו בתוך יישום React.

התקנת תלותים

PowerShell

 

הגדרת הסכימה

צור קובץ בשם schema.js:

JavaScript

 

סכימה זו מגדירה סוג User ושאילתת user שמביאה משתמש לפי מזהה.

יישום רזולברים

צור קובץ בשם resolvers.js:

JavaScript

 

הרזולר של שאילתת user מביא נתונים מ-REST API ומחזיר רק את השדות הנדרשים.

נשתמש ב-https://jsonplaceholder.typicode.com/ עבור ה-REST API המזויף שלנו.

הגדרת השרת

צור קובץ server.js:

JavaScript

 

הפעל את השרת:

PowerShell

 

שרת ה-GraphQL שלך פעיל ב-http://localhost:4000/graphql, ואם תבצע שאילתה לשרת שלך, זה יוביל אותך לדף הזה.

שילוב עם יישום ה-React

כעת נשנה את יישום ה-React להשתמש ב-GraphQL API.

התקנת Apollo Client

PowerShell

 

הגדרת Apollo Client

JavaScript

 

כתיבת השאילתת GraphQL

JavaScript

 

כעת, שלב את קטעי הקוד שלמעלה עם אפליקציית ה-React שלך. הנה אפליקציית React פשוטה למטה, המאפשרת למשתמש לבחור את ה-userId ולהציג את המידע:

JavaScript

 

תוצאה

תראו פרטי משתמש פשוטים כמו זה: [קישור ל-Github].

עובדים עם מספר נקודות קצה מרובות

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

אנו צריכים לאחזר נתוני משתמש, את הפוסטים שלהם, ואת התגובות לכל פוסט מנקודות הקצה השונות. נשתמש ב- fetch כדי לאסוף נתונים מנקודות הקצה המרובות ולהחזיר אותם דרך GraphQL.

עדכון שוחחנים

JavaScript

 

עדכון סכימת GraphQL

JavaScript

 

הגדרת השרת ב־ server.js נשארת זהה. לאחר שנעדכן את קוד ה-React.js, נקבל את הפלט הבא:

תוצאה

תראו משתמש מפורט כזה: [קישור ל-Github].

יתרונות של הגישה הזו

שילוב GraphQL לאפליקציית React שלך מספק מספר יתרונות:

הסרת פרטים מיותרים

תכונה מרכזית של GraphQL היא שהוא מבצע רק את מה שביקשת. השרת מחזיר רק את השדות שביקשת ווודא שכמות הנתונים שמועברת דרך הרשת נמוכה על ידי שירות רק את מה שהשאילתה דורשת, וכך משפר את הביצועים.

פשוט את קוד הקדמה

GraphQL מאפשר לך לקבל את המידע הנדרש בשאילתא אחת, ללא קשר למקורו. באופן פנימי, זה יכול לבצע 3 קריאות API כדי לקבל את המידע. זה מסייע לפשט את הקוד בחזית שלך כי עכשיו אינך צריך לתאם בקשות אסינכרוניות שונות ולשלב את התוצאות שלהן.

שיפור חוויית המפתחים

טיפוס חזק ואינטrospection של סכימות מציעים כלי עבודה טובים יותר ובדיקת שגיאות מאשר ביישום API המסורתי. יתרה מכך, ישנם סביבות אינטראקטיביות שבהן מפתחים יכולים לבנות ולבדוק שאילתות, כולל GraphiQL או Apollo Explorer.

התמודדות עם מורכבויות ואתגרים

גישה זו יש לה כמה יתרונות אך גם מציגה כמה אתגרים שצריך לנהל.

שכבת Backend נוספת

הקדמת שרת GraphQL יוצרת שכבה נוספת במבנה ה-backend שלך, ואם לא מנוהלת כראוי, היא הופכת לנקודת כישלון בודדת.

פתרון

שימו לב לטיפול בשגיאות ומעקב. כלים של קונטיינריזציה ותיאום כמו Docker ו-Kubernetes יכולים לעזור לנהל את הסקלאביליות והאמינות.

עומס פוטנציאלי על הביצועים

שרת GraphQL עשוי לבצע מספר קריאות REST API כדי לפתור שאילתא אחת, מה שיכול להוביל להשהיה ועומס על המערכת.

פתרון

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

סיכום

"הפשטות היא הגיבורה האולטימטיבית" – ליאונרדו דה וינצי

שילוב של GraphQL באפליקציית React שלך הוא יותר מאשר אופטימיזציה ביצועים – זה צעד אסטרטגי לבניית אפליקציות נתמכות יותר, גמישות ויעילות. על ידי טיפול באריכיטקטורת הנתונים ופשוטה, אתה לא רק משפר את חוויית המשתמש אלא גם מעצים את צוות הפיתוח שלך עם כלים ושיטות יותר טובים.

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

לקבל את GraphQL לא אומר לוותר על ה-REST APIs הקיימים שלך. במקום זאת, זה מאפשר לך לנצל את נקודות החוזק שלהם תוך ספק שכבת גישה לנתונים יעילה וגמישה יותר לאפליקציות הקליינט שלך. הגישה ההיברידית זו משלבת את האמינות של REST עם אגיליות של GraphQL, ונותנת לך את הטוב משני העולמות.

אם אתה מוכן להעביר את אפליקציית React שלך לרמה הבאה, שקול לשלב את GraphQL באסטרטגיית השאיבת נתונים שלך. המסע עשוי להציג אתגרים, אך התגמולים – תהליך פיתוח חלק יותר, מפתחים מרוצים, ומשתמשים מרוצים – עשויים להפוך את זה למאמץ ששווה.

הקוד המלא זמין

אתה יכול למצוא את הקוד המלא ליישום זה במאגר ה-GitHub שלי.

Source:
https://dzone.com/articles/enhancing-react-applications-with-graphql-over-rest-apis