איך לפרוס web service? מדריך שלב אחר שלב
מאמר זה ידון ב-webservices, ביתרונות שלהן, באפשרויות הפריסה של web services, ובאופן שבו הן מושוות ל-APIs.
בנוסף לכך, תלמדו כיצד לפרוס web service למסחר אלקטרוני בענן מבלי לכתוב כל קוד מותאם אישית!
Contents
עיקרי הדברים
- Understanding the Role of Web Services: Web services הן רכיב מרכזי בתשתית הדיגיטלית המודרנית, והן מציעות יתרונות משמעותיים כגון תאימות הדדית (interoperability), עצמאות פלטפורמה, יכולת סקייל (scalability) ואבטחה.
- Exploring Deployment Options: ניתן לפרוס web services בכמה דרכים, כולל אחסון קונבנציונלי (Conventional Hosting), Platform as a Service (PaaS), Containers as a Service (CaaS), ו-Backend as a Service (BaaS).
- Guidance on Deploying a Web Service to the Cloud: המאמר מספק מדריך מקיף לפריסת web service למסחר אלקטרוני באמצעות פלטפורמת BaaS ללא קוד.
מהו Web Service?
Web service הוא תוכנה הזמינה דרך האינטרנט, בדרך כלל באמצעות Hypertext Transfer Protocol (HTTP). הנתונים המסופקים על ידי web service מגיעים בפורמט סטנדרטי כמו XML, JSON, SOAP או YAML.
Web services משמשים לתקשורת בין מכונה למכונה, במקום שישמשו ישירות על ידי הלקוח הסופי.
לדוגמה, המכשיר הנייד שלכם משתמש ב-web service של מזג האוויר כדי לאחזר מידע על מזג האוויר ולאחר מכן מציג אותו בפורמט נוח.
קיימים מספר סוגי web services כגון Representational State Transfer (REST), GraphQL ו-gRPC.
מחזור החיים הרגיל של web service נראה כך:
- web service מאזין בשרת מסוים על פורט ספציפי.
- לקוח שולח בקשה אל ה-web service בפורט הזה.
- ה-web service מבצע את הבקשה ומחזיר תגובה. לפני עיבוד התגובה השרת עשוי גם לאמת ולאשר את הבקשה.
- הלקוח מעבד את התגובה.
Web services ידועים בעצמאות שלהם ממערכת הפעלה ושפה, ביכולת השימוש החוזר, בסקייליביליות, בגמישות ובכך שהם מצומדים באופן רופף. כיום, כמעט כל חברה בתחום ה-IT עושה בהם שימוש.
Web Service לעומת API
Web service ו-API הם מונחים דומים, אך אין להשתמש בהם זה במקום זה.
במילים פשוטות, web service הוא API הזמין אך ורק דרך האינטרנט. המשמעות היא שכל web services הם APIs, אך לא כל ה-APIs הם web services.
בנוסף להיותם web services, APIs יכולים לבצע גם פעולות אחרות. לדוגמה, אינטראקציות עם מערכת ההפעלה, תקשורת עם יישומים מקומיים ואינטגרציות עם יישומים.
שני דוגמאות ל-APIs שאינם web service הם Python file system API ו-JavaScript DOM API.
יתרונות של Web Service
Web services הם חלק יסודי בתשתית הדיגיטלית המודרנית, ומציעים יתרונות רבים. בואו נדבר עליהם!
Interoperability (תאימות הדדית)
אחד היתרונות המרכזיים של web services הוא היכולת שלהם לאפשר תאימות הדדית (interoperability) בין מערכות ויישומים שונים.
על ידי שימוש בפרוטוקולים סטנדרטיים כמו HTTP ו-XML, web services מאפשרים תקשורת חלקה בין רכיבי תוכנה שונים, ללא תלות בטכנולוגיה הבסיסית.
עצמאות פלטפורמה
עוד יתרון חשוב של web services הוא שהן עצמאיות לחלוטין מפלטפורמה. ניתן לממש אותן בכל שפת תכנות ולהריץ בכל מערכת הפעלה, כולל Windows, Linux ו-MacOS.
כפי שהוזכר בסעיף הקודם, ניתן לצרוך אותן גם בכל פלטפורמה.
פשוטות ויעילות
Web services קלות להבנה וליישום. ברוב המקרים, אין להן מצב (state) משלהן. במקום זאת, הן משתמשות בבסיס נתונים או מרכיב תוכנה אחר.
הן מציעות גישה פשוטה לגישה לפונקציונליות דרך הרשת. פשטות זו מסייעת לשמור על עקביות באינטראקציות, ומקלה על הבנת והשימוש בשירותים בפלטפורמות וטכנולוגיות שונות.
יכולת סקייל (Scalability)
Web services הן בעלות יכולת סקייל גבוהה. הן יכולות להתמודד עם כל עומס תנועה באמצעות סקייל אנכי (vertical scaling), כלומר הוספת משאבים נוספים לשרת קיים, או סקייל אופקי (horizontal scaling), כלומר הוספת שרתים נוספים.
דבר זה יכול לסייע בהפחתת עלויות באופן משמעותי, בכך שהוא מונע בזבוז משאבי מחשוב.
שימוש חוזר (Reusability)
הדבר הטוב ביותר ב-web services הוא שהן ניתנות לשימוש חוזר רב. במקום לשלב את אותו קוד במספר יישומים, כולם יכולים להשתמש במופע יחיד של web service.
שימוש חוזר מוביל לקוד מצומצם יותר וקל יותר לתחזוקה, מרכזיות טובה יותר, וחוסך במשאבים.
אבטחה
Web services יכולות לנצל מנגנוני אימות, הרשאה, הצפנה ואמצעי אבטחה נוספים. רוב ה-web services מוגנים באמצעות הצפנת SSL/TSL.
כל זה מבטיח סודיות (רק השולח והמקבל יכולים לקרוא את ההודעה) ושלמות (ההודעה לא שונתה במהלך העברה).
אפשרויות פריסת Web Service
Web services יכולות להתארח באופן עצמי או להיות נפרסות לענן. האפשרויות הפופולריות ביותר בענן לפריסת web services הן:
- Platform as a Service (PaaS)
- Containers as a Service (CaaS)
- Backend as a Service (BaaS)
לכל מודל ענן יש יתרונות וחסרונות שכדאי לשקול בעת פריסת הפרויקט שלכם. הגורמים החשובים ביותר שיש לקחת בחשבון הם קלות השימוש, תקציב, ביצועים ותכונות.
Conventional Hosting (אחסון קונבנציונלי)
Conventional hosting הוא גישה מסורתית לאחסון אתרים ויישומים. השרתים יכולים להיות מתוחזקים עצמאית או מסופקים על ידי חברות אחסון.
באחסון מסורתי, בדרך כלל שוכרים שטח בשרת על בסיס חודשי או שנתי.
תכונות עיקריות של אחסון קונבנציונלי כוללות:
- Server Space — תוכניות שונות של שטח שרת בהתאם לצרכי היישום שלכם
- Website Management Tools — כלים נוחים לניהול אתרים, כגון cPanel
- Email Hosting — שירותי אחסון מייל המאפשרים לחבר דומיין
- FTP Access — גישה לקבצי השרת באמצעות FTP או SFTP מאובטח
אחד היתרונות העיקריים של אחסון קונבנציונלי הוא המחיר הנמוך שלו, במיוחד עבור אתרים ועסקים קטנים.
עם זאת, הוא חסר יכולת סקייל וגמישות בהשוואה לפתרונות מבוססי ענן. כמו כן, אחסון קונבנציונלי מסובך יותר להגדרה.
Platform as a Service (PaaS)
Platform as a Service (PaaS) מאפשר ללקוחות ליצור, לנהל ולהפיץ יישומים בסביבת ענן.
בנוסף, חברות PaaS מציעות מגוון כלים מובנים ליצירה, התאמה ובדיקה של יישומים.
בהשוואה ל-IaaS, PaaS פשוט יותר לשימוש ודורש פחות ניסיון בניהול מערכות.
כמו כן, תוכלו ליהנות מאזני עומסים (load balancers), מסדי נתונים מנוהלים וגיבויים אוטומטיים. בהשוואה ל-IaaS, ל-PaaS יש פחות חופש ושליטה, וכן סיכון גבוה יותר לנעילה לספק (vendor lock-in).
Containers as a Service (CaaS)
Containers as a Service (CaaS) הוא מודל נוסף ומוכר במחשוב ענן. CaaS מפשט את תהליכי הפיתוח, ההרצה, הפריסה והתחזוקה של תוכנה במכולות (containerized software). לעיתים קרובות משלבים אותו עם Docker ו-Docker Compose.
רוב פלטפורמות ה-CaaS מספקות:
- Docker Engine
- Container registry
- Scaling capabilities
היתרון המרכזי של תוכנה במכולות הוא שהיא ניתנת לפריסה בכל מקום. אין נעילה לספק בודד (vendor lock-in), כלומר ניתן לעבור בחופשיות מספק ענן אחד לאחר. זה שימושי במיוחד עבור web services.
Backend as a Service (BaaS)
Backend as a Service (BaaS) הוא מודל במחשוב ענן שמטפל בתשתית שלכם ומבצע אוטומציה לחלק ה-Backend בפיתוח.
בנוסף, הוא מציע יכולות כמו מסד נתונים בזמן אמת, אחסון קבצים, אינטגרציות לרשתות חברתיות, התראות במייל וב-Push, ועוד.
כתוצאה מכך, מפתחים יכולים להתמקד ביצירת ה-Front End מבלי לדאוג לתשתית ול-Backend.
חלק ה-Front End נבנה לעיתים קרובות באמצעות APIs ו-SDKs ייחודיים לספק ה-BaaS. באמצעות BaaS, ניתן לפשט את בסיס הקוד ולהפוך אותו ליותר קל לתחזוקה.
BaaS מספק את כל היתרונות של IaaS ו-PaaS יחד עם שכבת הפשטה ל-Backend. בשימוש ב-BaaS, צוותים מקצרים את זמן היציאה לשוק וחוסכים בעלויות פיתוח וכוח אדם.
כיצד לפרוס Web Service?
בחלק זה של המאמר, נספק מדריך צעד-אחר-צעד לפריסה של web service בפלטפורמת Back4app. נשתמש בפתרון ה-BaaS ללא קוד של Back4app.
אם אתם מעוניינים בפתרונות עם קוד מותאם אישית, עיינו במאמרים הבאים:
- Deploy a Flask Web Service to Back4app Containers
- Deploy a Node.js Web Service to Back4app Containers
- Deploy a PHP Web Service to Back4app Containers
- Deploy a FastAPI Web Service to Back4app Containers
מהו Back4app?
Back4app הוא אחד מפתרונות Backend as a Service (BaaS) הפופולריים ביותר.
בשימוש בו, תוכלו להאיץ בצורה משמעותית את תהליך הפיתוח שלכם ולהתמקד בחלקים העיקריים של האפליקציה — כגון הלוגיקה העסקית וה-Frontend, בעוד Back4app תטפל בשאר.
Back4app מציעה פריסה ללא קוד (no-code) ופריסה עם קוד מותאם אישית. היא קלה מאוד לשימוש וכמעט שאין עקומת למידה. היא מתאימה למתחילים וגם למפתחים מנוסים.
הדבר הנהדר ב-Back4app הוא שהיא מייצרת אוטומטית RESTful ו-GraphQL APIs בהתבסס על מחלקות בסיס הנתונים שלכם.
בנוסף לכך, היא מספקת SDKs כמעט לכל שפת תכנות או פריימוורק פופולרי, כמו React, Android, iOS ועוד!
Back4app Core Features
- מסדי נתונים בסגנון גיליון אלקטרוני (spreadsheet-like)
- ניהול משתמשים ואימות (authentication)
- יצירת API אוטומטית
- פונקציות Cloud Code ותזמון (scheduling)
- נתונים בזמן אמת (real-time data)
כדי לעקוב אחרי המדריך, תצטרכו חשבון חינמי ב-Back4app. אם אין לכם אחד, תוכלו ליצור חשבון.
הקדמת הפרויקט
במהלך המאמר, נבנה web API פשוט למסחר אלקטרוני.
ה-API יספק פונקציונליות לניהול מוצרים, קטגוריות מוצרים ורכישות. הוא יאפשר ביצוע פעולות יצירה, קריאה, עדכון ומחיקה (CRUD) על כל מחלקת בסיס נתונים.
בנוסף, נשתמש ב-Cloud Code כדי לממש פונקציות מותאמות אישית לחישוב סטטיסטיקות מסחר אלקטרוני, כגון סך המכירות והמוצרים הפופולריים ביותר.
לבסוף, נבדוק את ה-API באמצעות ה-REST וה-GraphQL Console המובנים של Back4app.
יצירת אפליקציה
כדי לעבוד עם Back4app, תחילה עליכם ליצור אפליקציה. לשם כך, התחברו בעזרת חשבון ה-Back4app שלכם ולחצו על “Build new app” במסך לוח הבקרה של האפליקציה.
פלטפורמת Back4app מאפשרת לכם לפרוס שני סוגים של אפליקציות:
- Backend as a Service (BaaS)
- Containers as a Service (CaaS)
שני המודלים הללו במחשוב ענן מאפשרים לכם לפרוס web services.
ההבדל העיקרי הוא ש-BaaS מהווה Backend שלם, בעוד CaaS מאפשר לכם לפרוס web services המבוססים על מכולות.
במילים אחרות, BaaS הוא לרוב פתרון ללא קוד, בעוד CaaS הוא פתרון עם קוד מותאם אישית.
אנחנו נבחר ב-Backend as a Service (BaaS).
בעת יצירת אפליקציה ב-Back4app, תוכלו לבחור בין בסיס נתונים NoSQL או SQL. לצורך המדריך שלנו אין לכך משמעות רבה, אז נישאר עם NoSQL.
תנו לאפליקציה שלכם שם מתאים, ולחצו על “Create”.
המתינו ש-Back4app תטפל בהכול, כולל בסיס הנתונים, שכבת האפליקציה, סקייל, הגדרת ניהול משתמשים וכו’. זה יימשך בערך שתי דקות.
בסיום, תועברו לתצוגת בסיס הנתונים שלכם.
עיצוב בסיס הנתונים
נמשיך כעת ונטפל בבסיס הנתונים.
באופן ברירת מחדל, אפליקציית Back4app מגיעה עם מחלקות בסיס נתונים _Role
ו-_User
. שתי המחלקות הללו משמשות לניהול משתמשים ואימות.
נושאים אלה חורגים מהיקף המדריך, אך תוכלו לקרוא מאמרים נוספים שלנו כדי ללמוד עליהם.
כדי ליצור את ה-web API למסחר אלקטרוני שלנו, ניצור את מבנה בסיס הנתונים הבא:
נתחיל ביצירת המחלקה ProductCategory
.
לחצו על “Add Class” בסרגל הצד כדי ליצור מחלקת בסיס נתונים חדשה. שם המחלקה יהיה “ProductCategory”, אפשרו “Public Read and Write”, ולחצו על “Create class & add columns”.
הוסיפו אליה את העמודות הבאות:
+-----------------------------+-------------+---------------+----------+
| Type | Name | Default value | Required |
+-----------------------------+-------------+---------------+----------+
| String | name | | yes |
+-----------------------------+-------------+---------------+----------+
| String | description | | no |
+-----------------------------+-------------+---------------+----------+
לאחר מכן, בצעו את אותם צעדים ליצירת מחלקה Product
:
+-----------------------------+-------------+---------------+----------+
| Type | Name | Default value | Required |
+-----------------------------+-------------+---------------+----------+
| String | name | | yes |
+-----------------------------+-------------+---------------+----------+
| String | description | | no |
+-----------------------------+-------------+---------------+----------+
| Relation -> ProductCategory | categories | true | yes |
+-----------------------------+-------------+---------------+----------+
| Number | price | 0.0 | yes |
+-----------------------------+-------------+---------------+----------+
| Boolean | inStock | true | yes |
+-----------------------------+-------------+---------------+----------+
ולבסוף, טיפלו במחלקה Purchase
:
+-----------------------------+-------------+---------------+----------+
| Type | Name | Default value | Required |
+-----------------------------+-------------+---------------+----------+
| Pointer -> Product | product | | yes |
+-----------------------------+-------------+---------------+----------+
| Number | quantity | 1 | yes |
+-----------------------------+-------------+---------------+----------+
מעולה, יצרתם בהצלחה את מבנה בסיס הנתונים.
כפי שאתם רואים, סוג הנתונים Pointer
מטפל ביחס 1:n
(אחד לרבים), ו-Relation
מטפל ביחס n:m
(רבים לרבים).
הדבר האחרון שעליכם לעשות הוא להזין מספר קטגוריות מוצרים, מוצרים ורכישות. זה יאפשר לנו לבדוק מאוחר יותר שה-web service פועל כמצופה.
כדי לאכלס את בסיס הנתונים, תוכלו:
- ליצור בעצמכם מספר קטגוריות מוצרים, מוצרים ורכישות
- לייבא את ייצואי בסיס הנתונים האלה מ-GitHub (“More > Import > Class Data”)
שימוש ב-Web Service
כדי להתחבר ל-web service, Back4app מאפשרת מספר גישות:
- Auto-generated RESTful API
- Auto-generated GraphQL API
- Parse SDK
בואו נבחן כל אחת מהן!
REST API
Representational state transfer (REST) הוא פרוטוקול מבוסס HTTP, המשתמש ב-HTTP methods כגון OPTIONS
, GET
, POST
, DELETE
וכן הלאה.
רוב ה-APIs שבהם אתם משתמשים כיום מבוססים על REST. הוא תומך בפורמטים רבים, אך הפופולרי ביותר הוא JSON.
REST הוא פרוטוקול יעיל, בעל יכולת סקייל גבוהה, ועצמאי פלטפורמה. ניתן להשתמש בו עם כל שפת תכנות או פריימוורק.
החסרונות העיקריים שלו הם משיכת-יתר או משיכה-חסרה של נתונים (over-fetching / under-fetching), היעדר מנגנון מנויים בזמן אמת (real-time subscriptions), והיעדר מערכת גירסאות ל-API.
כדי לבדוק את ה-REST API, בחרו “API > Console > REST” ובצעו את השאילתה הבאה:
שאילתה זו אמורה להניב את התגובה הבאה:
למידע נוסף, קראו את How to Build a REST API?
GraphQL API
GraphQL הוא runtime צד שרת ושפת שאילתות לבניית APIs.
GraphQL מאפשר ללקוחות לבקש נתונים ספציפיים מה-API במקום להסתמך על השרת שיספק מבנה נתונים מוגדר מראש.
היתרונות שלו כוללים גמישות, יכולת תחזוקה, והרחבות (GraphQL extensions). מנגד, החסרונות הם מורכבות, עקומת למידה תלולה והיעדר סטנדרטיזציה.
כדי לבדוק את ה-GraphQL API, בחרו “API > Console > GraphQL” ובצעו את השאילתה הבאה:
למידע נוסף, קראו את How to Build a GraphQL API?
Parse SDK
Parse SDK הוא הגישה המומלצת אם ה-Frontend שלכם בנוי בשפת תכנות או פריימוורק שנתמך באופן טבעי על ידי Parse SDK.
אלה כוללים React Native, Flutter, Android, iOS, JavaScript, IONIC, ו-Xamarin.
Parse SDK מספק מחלקות ופונקציות לאחזור נתונים, מניפולציה של נתונים, אימות משתמשים, נתונים בזמן אמת, פונקציות Cloud Code ועוד.
דוגמה לקוד אחזור נתונים ב-JavaScript נראית כך:
API Documentation
יתרון נוסף של Back4app הוא שהיא יוצרת תיעוד אוטומטי לכל מחלקות בסיס הנתונים שלכם.
התיעוד כולל תיאור של המודלים, דוגמאות מעשיות, הסברים על טיפול בטעויות ועוד.
בחרו “API > API Reference” בסרגל הצד כדי לצפות בתיעוד.
Cloud Code
ה-APIs האוטומטיים מעולים, אך לא ניתן לעשות באמצעותם הכול. לדוגמה, אם תרצו לבצע שאילתות מורכבות, לאסוף נתונים (aggregate) או להריץ קוד מותאם אישית, עליכם להשתמש בפונקציות Cloud Code.
פונקציות Cloud Code הן ההיצע של Functions as a Service (FaaS) ב-Back4app. הן מאפשרות לכם להגדיר פונקציות JavaScript מותאמות אישית, שאותן ניתן להפעיל דרך ה-API או לתזמן להפעלה בזמן קבוע מראש.
יצירת פונקציות Cloud Code
ניצור שתי פונקציות Cloud Code לחישוב סטטיסטיקות מסחר אלקטרוני:
totalRevenue()
תחושב את סך ההכנסות על ידי צבירה של הרכישותtopTenPopularProducts()
תחזיר את המוצרים הפופולריים ביותר בהתבסס על רכישות
ראשית, נווטו אל “Cloud Code > Functions & Web Hosting” בסרגל הצד.
תבחינו שהמסך מחולק לשני חלונות. משמאל נמצאת היררכיית התיקיות, ומימין ניתן להזין קוד.
תיקיות ברירת המחדל הן:
- cloud – משמשת לפונקציות Cloud Code ולקוד נוסף
- public – תיקייה שנחשפת אוטומטית על ידי Back4app (תוכן סטטי, קבצי CSS, HTML)
נווטו ל-main.js.
לאחר מכן, הכניסו לתוכו את הקוד הבא:
לבסוף, לחצו על “Deploy” כדי לפרוס את הפונקציות לענן.
הקוד לעיל נוצר בעזרת Back4app Agent – AutoGPT למפתחים. הכלי משולב עם Back4app ו-Back4app Containers ומאפשר לכם ליצור אפליקציות, לשנות הגדרות אפליקציה, לייצר קוד מותאם אישית ועוד.
בדיקת פונקציות Cloud Code
בחלק האחרון נבדוק את פונקציות ה-Cloud Code שיצרנו זה עתה.
ראשית, בחרו “API > Console > JavaScript” בסרגל הצד ואז הדביקו את הקוד הבא:
להרצה, לחצו על “Run” בפינה העליונה של המסך.
אתם אמורים לקבל את התגובות הבאות:
// `totalRevenue` output
{
"result": 9385.389999999994
}
כדי להריץ את הפונקציה השנייה, החליפו totalRevenue
ב-topTenPopularProducts
.
// `topTenPopularProducts` output
{
"result": [
{"objectId": "SA5mUfq9Ll", "name": "Science Fiction Novel", "count": 3},
{"objectId": "fV0DFPFlnz", "name": "Yoga Mat", "count": 3},
{"objectId": "gA4zn19Udo", "name": "Smartphone", "count": 2},
{"objectId": "UKeOHJkJ7l", "name": "Winter Jacket", "count": 2},
{"objectId": "8PodlEps2R", "name": "Espresso Machine", "count": 2},
{"objectId": "S15WrDgrpk", "name": "Hair Dryer", "count": 2},
{"objectId": "8O2D1egX51", "name": "4K Television", "count": 1},
{"objectId": "RriSWMDg48", "name": "Face Cream", "count": 1},
{"objectId": "Cq3Hqww69Q", "name": "Blender", "count": 1}
]
}
Conclusion
לסיכום, למדתם על web services, היתרונות שלהן, אפשרויות הפריסה שלהן, ועל האופן שבו הן מושוות ל-APIs. בנוסף, כעת אתם אמורים לדעת כיצד לפרוס web service משלכם ל-Back4app BaaS.
לעוד משאבי מאמר, עיינו ב-מאגר back4app-web-service ב-GitHub.