שימוש בשירותים ללא שרת: פיתוח מודרני של יישומים

במאמר זה, אני אדריך אתכם בתהליך יצירת API של GraphQL ללא שרתים באמצעות TypeScript, AWS Lambda ו-Apollo Server.

מחשוב ללא שרתים

מחשוב ללא שרתים הוא מודל ביצוע מחשוב בענן שבו ספקי הענן מנהלים באופן אוטומטי את התשתית להרצת יישומים. במודל זה, מפתחים כותבים קוד, וספק הענן דואג להרצה, להגדלה ולתחזוקה של השרתים, מה שאומר שמפתחים לא צריכים לדאוג לניהול שרתים, אספקת תשתית או הגדלה. המונח "ללא שרתים" לא אומר שאין שרתים מעורבים, אלא שהמשימות של ניהול השרתים מופשטות מהמפתחים. AWS Lambda היא שירות חישוב ללא שרתים המוצע על ידי Amazon Web Services (AWS) שמאפשר לכם להריץ קוד מבלי לספק או לנהל שרתים

GraphQL

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

Apollo Server

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

למה TypeScript?

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

למה אני מוצא ש-serverless ו-GraphQL עובדים כל כך טוב יחד (או "סיפור אהבה בקוד")

  1. שימוש אופטימלי במשאבים: שליפת הנתונים המדויקת של GraphQL מתאימה בצורה מושלמת למודל ה-serverless של תשלום לפי שימוש, ומבטיחה ניצול יעיל של המשאבים.
  2. בקאנד מפושט: פונקציות ללא שרת יכולות לטפל במפענחי GraphQL ביעילות, ומייעלות את הארכיטקטורה של הבקאנד.
  3. ביצועים משופרים: היכולת של GraphQL להפחית את העומס של הנתונים מתורגמת ליישומים מהירים יותר, במיוחד כאשר היא משולבת עם ארכיטקטורת serverless.
  4. היכולת להתאמן: שני הטכנולוגיות מצטיינות בעיצוב עבור עומסים משתנים, מה שעושה את השילוב מאוד מסודר לגמרי.
  5. עלות יעילה: מודל השימוש בפיתוח עם השירותים הללו של חשבון השרתים הלא-מוגדרים, במקביל לעבודת העברת המידע היעילה של GraphQL, יכול להוביל לחסכונות משמעותיים.

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

הנה הוראת הצעדים הפעמונים להשתקמת שירות עם GraphQL ב AWS Lambda.

  • צעד 1: הקמת פרוייקט TypeScript חדש והתקנת תלויות.
Shell

 

  • צעד 2: הגדרת הסקEMA של GraphQL עם הרכיבים הנחוצים.
TypeScript

 

  • צעד 3: יישום מתפקדים:
TypeScript

 

  • צעד 4: יצירת מנתח ל Lambda:
TypeScript

 

  • צעד 5: הגדרת השידור הלא-מוגדר. יצירת קובץ serverless.yml:
service: serverless-graphql-api

provider:
  name: aws
  runtime: nodejs16.x
  stage: dev
  region: us-east-1

functions:
  graphql:
    handler: handler.graphqlHandler
    events:
      - http:
          path: graphql
          method: post
      - http:
          path: graphql
          method: get

plugins:
  - serverless-offline

אתה יכול לכתוב את הקוד בלambda בAWS (מהווה עולם קיצוני) ולהשתמש באפשרויות השידור המתאימות כמו CDK או Terraform. בהתמדה של שירות ללא שרידים וGraphQL ימשיכו להתפתח, אנחנו יכולים לצפות בכל כך הרבה כלים ומנהגים חזקים יותר.

סיכום

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

Source:
https://dzone.com/articles/serverless-computing-and-graphql