מה הם APIs?
האם אי פעם תהיתם איך אתם יכולים להתחבר ליישומים האהובים עליכם כמו פייסבוק, Hashnode, dev.to, לינקד וכן על. אני יודע שריכזתם את תשומת ליבכם והתחלתם לחשוב מהר. או שחשבתם על איך זה היה קל להיכנס לWakaNow של האפליקציה ולקבל את הדמיות הזולות והנייטרליות ביותר מכל מקום בעולם? אפילו אוצרי כדורספורט לא מוותרים כי הם יכולים לגלות את התוצאות בזמן אמת.
התשובה לכל אלה היא שהם מתקשרים עם מערכות אחרות כדי לקבל את המידע הזה או לאשר פרטים, והאופן של התקשורת הוא דרך הAPI.
במאמר זה, התפיסה של הAPI תופסה ונובעת הבנה ברורה ומתאימה למה שAPIs הם, הסוגים שלהם והדרך שבהם הם פועלים.
I. הוגדרה של APIs
A. מה הוא API?
API, שהיא אבן השיח התוכנה, היא פשוט כלי שבעזרתו מערכות או טכנולוגיות יכולות לתקשר אחת עם השניה על ידי חלוקת מידע או נתונים. זה יכול להיות הסבר נוסף שהוא כמות של תוכנות שמתקשרות אחת עם השניה על ידי חלוקת מידע באמצעות פרוטוקול או סטנדרט של החלוקה.
B. למה APIs חשובים?
APIs חשובים מפני שהם מאפשרים למערכות וטכנולוגיות להתאחדות ולשתף פעולה, לחלוק מידע ופונקציות, ולעבוד ביחד על מנת ליצור מערכות חזקות ויעילות. בנוסף, APIs מעניקים למפתחים את היכולת העלולה לקישור יישומים כדי לבצע משימה ספציפית. לדוגמה, בלוג אופנה ואינטגרציית Flutterwave API כדי לאפשר ללקוחות לשלם על עיצובים או סדנאות, אתה גם יכול להתחבר ליישומים שמחוברים לחשבון Google שלך.
APIs יכולים להשתמש בכדי לקבל מידע מצד שלישי ולהחלף מידע, מה שמאפשר לנו לעשות דברים משוגעים בתור מהנדסי תוכנה.
C. איך APIs פועלים?
בואו נעשה את האנלוגיה הבאה בתנועה, אתה רוצה ללמוד באוניברסיטה. עליך לעבוד על שירותים מסויימים שיכללו להיות במבחנים ואחר כך להגשת התוצאות ולבקש במכללה המועדפת עליך. אתה לא צריך ללכת ישירות למנהל ההגעה עבור בקשה להרשמה, אתה רק צריך לבקר באתר המכללה, להזינות את הפרטים שלך ולהעלות את הרישומים. בזמן המחכות להגעה, דברים רבים מתרחשים בחלק האחורי שאתה לא יודע עליהם אבל תקבל את ההגעה אם מושגים המשאלות מוגשים.
התהליך כולו נראה כך, אנחנו רוצים לתקשר עם משרד ההגעה באוניברסיטה, ומפני שאיננו יכולים לגשת למשרד ההגעה
דמיינו שלא היה תמונה קבלה, הייתם צריכים ללכת למשרד קבלת האוניברסיטה כדי להגשים את פרטי התלמיד, משהו שיהיה משך זמן ועלול להיות לא מוכן מפרטים.
כדי לחבר שתי יישומים תוכנה דרך האינטרנט, תוכנה אחת, הידועה כלient (משתמש), שולחת בקשה אל תוכנה השניה דרך הAPI שלה. הלient מבקש משאב מבססת היישומים או שמעלה פעולה בשרת.
אחרי קבלה ואישור הבקשה של הלient, הAPI מבצע את הפעולה הרצועה ושולח תשובה ללient. התשובה הזאת כוללת את מצב הבקשה (בוצעה או דחותה) בנוסף למשאבים המבקשים על ידי הלient.
ציון 1. העבדה של הAPI
D. סוגים של API
יש בערך ארבעה סוגי API שנהיים בהסבר.
API ציבוריים: API ציבורי או הAPI החיצוני הוא סוג של API שניתן לשימוש בו באופן פתוח לציבור כולו. בעלי הAPI משתפים את המידע והמשאבים שלהם עם שלישי צדדים שיכולים לכל ארגון, מפתחים והציבור כולו. המטרה הספציפית היא לאפשר לכל אחד לבנות איתו, להשתלב אותו ביישומים או לעבוד על שיפורם.
דוגמאות לAPI ציבוריים כוללות; Bitquery, Adoptapet, covalenthq.
API פרטיות:
אינטרנלי או אפילו פרטי את האחרונים האלה הם סוגים של אפילו שנים רק זמינים למפתחים או לאנשים שבנו אותם. הם נגישים רק כשמועלים הוזמנות על ידי בעלים.
דוגמאות לאפילו אחדים מוכיחים את האחרונים;
APIs שותפים
API שניתן למפתחים או שותפים מבחוץ על ידי חברה או ארגון כדי לאפשר תקשורת ואינטראקציה עם שירותיהם, נתונים או הפלטפורמה נקראת את הAPI השותף, והוא ידוע גם בשם API שלישי צד או API של מפתח. הAPIs האלה מיועדים כדי להקל על השלב של השילוב של מערכות, תוכנות או שירותים שונים.
ארגונים המעריכים להרחיב את המוערך של מוצריהם או השירותים שלהם ולתת קידום לשיתוף פעולה עם מפתחים או תאגידים מבחוץ, מעניקים בעיקר APIs שותפים. בעזרת הAPIs האלה, השותפים יכולים ליצור תוכנות, מכשירים או שירותים שמשתמשים בנתונים, תפקידים או טכנולוגיית החברה.
חלק מדוגמאות לAPIs שותפים הם:
APIs מארגנים
APIs מארגנים, גם נקראים API אגרגציה או API משולבים, הם סוגים של APIs שמערבבים ומאגרים מידע או פעילות מספר משרדים API תחתים או שירותים לתצוגה ביחד. הAPIs האלה מאדדות את תהליך השילוב ומציעות תצוגה מאחת של מקורות מידע באמצעות הפתיחת מפתח אחד שמאפשר לפתחנים לגשת ולתקשר עם שירותים שונים.
כשמפתחים צריכים לקבל בהמשך מידע או לבצע מספר פעולות ממקורות רבים, מנגנונים משולמים מועילים. מנגנון משולם מאפשר למפתחים לשלוח בקשה אחת כדי לגשת למידע או לבצע פעולות ברחבי המערכות השונות במקום לשלוח בקשות נפרדות לכל מנגנון. התהליך השילוב מועדף, המורכבות מורדת, והיעילות גבוהה כתוצאה.
הנה דוגמה למנגנון משולם שמאגגג מידע מזג אוויר מספקים מרבים של שירותים למזג אוויר:
כדי לאגגג מידע מספקים רבים אלה ולספק למפתחים את מסך המידע האחד למזג אוויר, מנגנון משולם אחד יכול להיווצר. זה מאפשר למפתחים לקבל מידע על מזג אוויר ממקורות רבים בעזרת בקשה אחת למנגנון API.
II. סוגים של מנגנון הAPIs
A. מנגנונים Web API
Web APIs הן הנפוצות ביותר מכיוון שרוב הפעילויות היומיומיות שלנו סובבות סביב האינטרנט. Web APIs הן תקנים המאפשרים לדברים להיות באותו אופן בדפדפנים שונים. זה מתייחס לשני צידי התקשורת. Web APIs, הידועות בדרך כלל כ- Application Programming Interfaces (APIs), הן ממשקים המסופקים על ידי שירותי אינטרנט או אפליקציות המאפשרים תקשורת ואינטראקציה מקוונת ביניהם לבין תוכנות אחרות. מפתחים יכולים לגשת בצורה תכניתית ליכולות, שירותים או נתונים מסוימים מאפליקציה או שירות אינטרנט בזכות Web APIs.
1. RESTful APIs
RESTful APIs, שהם ראשי תיבות של Representational State Transfer Application Programming Interface, הם סט של תקנים המאפשרים למחשבים לתקשר אחד עם השני דרך האינטרנט בהתאם לעקרונות העיצוב של ארכיטקטורת REST (או REpresentational State Transfer).
חלק מ-REST API כולל
-
Request —–→ Response
-
Operation – GET, POST, PATCH, UPDATE, DELETE
-
Endpoint – Url
-
Parameter/Body
-
Headers
איור 2 דיאגרמת REST API
עקרונות המפתח של REST כוללים:
- מבנה רשת לקוח-שרת: רEST מפריד את הרכיבים הלקוח והשרת, אפשרות להם להתפתח באופן עצמאי. הלקוח שולח בקשות אל השרת, והשרת עובד את הבקשות ושולח תגובות.
- חוסר מצב: רEST חסר מצב, מה שאומר שכל בקשה מהלקוח אל השרת צריכה להכיל את כל המידע הנחוץ כדי להבין ולעבד את הבקשה. השרת לא שומר על ההקשר של הלקוח בין בקשות, מפשט את הסקאלביליות ומאפשר טוב יותר את הקצתן.
- ממשק אחיד: רEST מקדם ממשקים אחידים של פנים ושורשים, בדרך טיפוסית בשימוש בשיטות HTTP סטנדרטיות כמו GET, POST, PUT ו DELETE. כל משאב במערכת רESTful מזוהה באופן ייחודי בעזרת URL (כיוון מקור מאובחן).
-
מבוסס משאב: REST מתייחס לכל דבר כמשאב, כגון ישויות נתונים, שירותים, או אוספים. לכל משאב יש מזהה ייחודי וניתן לגשת אליו ולבצע בו מניפולציות באמצעות שיטות HTTP סטנדרטיות.
-
ייצוג משאבים: משאבים ב-REST מיוצגים באמצעות פורמט מסוים, כגון JSON (JavaScript Object Notation) או XML (eXtensible Markup Language). השרת שולח ייצוגים של המשאבים בחזרה ללקוח, שיכולים לכלול נתונים, מטא-נתונים או קישורי היפרמדיה.
-
אינטראקציות חסרות מדינה: כל בקשה שנשלחת מהלקוח לשרת היא עצמאית ואינה תלויה בבקשה קודמת או במצב כלשהו בשרת. זה מאפשר סקלאביליות טובה יותר, מכיוון שהשרת אינו צריך לשמור מידע על מצב הלקוח.
יתרונות של REST API
-
פשוט וסטנדרטי
-
סקלאבילי וחסר מדינה
-
ביצועים גבוהים וניתן למטמון
2. SOAP APIs
SOAP שהוא קיצור של Simple Object Access Protocol הוא שירות רשת שעומד ב-מפרט שירותי הרשת של SOAP. זהו פרוטוקול הודעות פופולרי שמשתמש ב-XML כפורמט, עם סכימה מוגדרת היטב ופרוטוקול משתמש סטנדרטי. הוא מוגדר על ידי הקונסורציום של הרשת העולמית (W3C). פרוטוקולי SOAP מכסים מספר רחב של פרוטוקולי תקשורת אינטרנט, בעיקר HTTP, SMTP ו-TCP/IP.
תמונה 3 דיאגרמת SOAP API
יתרונות השימוש ב-SOAP API
-
תלויים בשפה, בפלטפורמה ובתחבורה.
-
עובד היטב בסביבות ארגוניות מבוזרות.
-
מספק יכולת הרחבה משמעותית מראש בצורת התקנים של WS*.
-
טיפול שגיאות מובנה.
- RPC.
הפרוצדורל פקינג קול (RPC) הוא מדידה לשליחת מספר פרמטרים ולקבלת תוצאות. זהו התקשורת עם פעולה רחוקה, היא אינה קיימת על המחשב המקומי שלך אך חייבת להיות מופיעה ממקום שהיא מוצעת. היא אסינכרונית בגלל שצריך לקבל תשובה כדי להיות מותווה כהצלחה. זוהי אינטראקציה פשוטה בין הלקוח לשרת. פתרונות RPC גורמים לביצוע פעולות הומולוגיות או הלאה. RPC יכולה להשתמש בשתי שפות שונות, JSON וXML.
תמונה 4: פרוצדורל פקינג קול
GraphQL הוא שפת בקשה לאפיינים שמאפשרת ללקוחות לבקש מידע ספציפי ולהגדיר את התשובה בהתאמה לצרכיהם.
מספר דוגמאות של פתרונות API GraphQL
GitHub GraphQL API, Shopify GraphQL API, SpaceX GraphQL API, Yelp GraphQL API, Twitter GraphQL API (Twitter API v2).
השוואה בין פרוטוקולוגיות API
REST |
SOAP |
RPC |
GraphQL |
עובדת עם XML, JSON, HTTP וטקסט פשוט |
עובדת עם XML מאז העיצוב |
דרוש למשתמשים לדעת את שמות התהליכים |
עובדת עם HTTP |
עובדת טוב עם מידע |
עובדת טוב עם תהליכים (פעולות) |
פרמטרים ספציפיים וסדרים |
|
בטחון מוגבל |
בטחון מתקדם |
||
המדרכה יכולה להיות מסוף על ידי היפרמדים |
הכי קשה לפילופרמטים לשימוש |
דרושה מדריך רחבה |
|
שיטות בקשות הן GET, PUT, DELETE, PATCH, UPDATE. |
שיטת בקשה היא POST |
שיטת בקשה היא POST |
שיטת בקשה היא POST |
III. מונחים רגילים ב API
A. קצוות
קצת או API היא אחת מקצות או קצות הערך בקו התקשורת. כשAPI מתנהלת במגע עם מערכת אחרת, הנקודות המגע של התקשורת נקראות קצות. במילים פשוטות, המקום בו אפילו מועברות משאבים והמקום בו המשאבים עוזבים נקרא קצה. ב API, קצה בדרך טיפוסי הוא כתובת משאב (URL) שמספקת את המיקום של משאב על השרת.
דוגמה לקצה היא
דוגמה לקצת או API של Twitter
ה API של Twitter מפתח מידע על ציוצים, מסרונים ישירים, משתמשים ועוד.
נניח שאתה רוצה לשלוף את התוכן של ציוץ ספציפי. כדי לעשות את זה, אתה יכול להשתמש בקצת חיפוש ציוצים, שיש לו כתובת api.twitter.com/2/tweets{id} (בה ה{id} הוא המידע הייחודי של הציוץ).
ב. בקשות ותשובות
בקשה של API היא מסר שנשלח מהלקוח לשרת. בקשה של API היא בקשה שנעשת למערכת API כדי להגיע או לשנות מידע או לבצע פעולה ספציפית. תשובת API היא המידע או המידע הזה שחוזרים בתגובה לבקשה API.
לדוגמה, משתמש מלחיצה על הפונקציה הבאה:
<a href=’http://localhost:2400/categories/01/flavours ’>
הראה את כל הטעמים הזמינים בקטגורית הטעמים
</a>
המסר הHTTP של הבקשה יישלח בצורה כזו:
GET /categories/01/flavours HTTP/1.1
מאזור: המאזור המקומי:2400
משתמש-אג 'נט: Chrome/5.0 [תואם, Windows 10]
בקשת API
1. העתק קוד
GET https://api.com/categories/flavours
תשובת הAPI
1. העתק קוד
HTTP/1.1 200 OK
2. Content-Type: application/json
3.
4. {
5. "id": 01,
6. "flavours": "Chocolate"
7. }
אנחנו רואים בבקשה הזו שהנקודה הסוף היא URL – /categories/01/flavours.
השיטה הבקשה היא GET, הספקציה הHTTP היא 1.1, הרשת היא localhost, הפורט הוא 2400, Flavours הוא המשאב, וה-user-agent מספק את הדפדפן והמערכת ההפעלה.
C. שיטות הHTTP (GET, POST, PUT, DELETE)
APIs שמשתמשות בפרOTOקל הHTTP משתמשות בשיטות בקשות HTTP (גם ידועות כ "פעמוני הHTTP") עבור העברת בקשות לשרתים. השיטות הבקשות הHTTP הנמצאות בשימוש הרבה הם GET, POST, PUT ו DELETE.
-
GET משמש עבור לוקחים כדי להשיג מידע משרת,
-
PUT מחליף מידע קיים או יוצר מידע חדש אם הוא לא קיים,
-
POST משמש בעיקר כדי ליצור משאבים חדשים,
-
PATCH משמש לעדכון חלקי מידע ממשק ו
-
DELETE מסיר את המידע או המשאבים המסומנים על ידי הלקוח על שרת.
D. אבטחת API – המתעדכון והאישור
שני המונחים הללו עשויים להישמע דומים אך יש להם פעולות נפרדות. האותנטיציה קשורה לאישור המשתמשים או הזהות, בעוד האישור קשור לגישה של משתמש או להסמכה על פעולה. הם בסיסיים לאבטחת API. שיטה פופולרית אחת לאישור ואישור משתמשים היא OAuth 2.0.
סוגים שונים של אישור
יש מספר שיטות לאישור. הנפשות הבאות הן סוגים של API אישור שאתה עשוי לפגוש:
-
מפתחים API
E. מפתחים ותוכניות API
API מפתחים הם שרותים טקסט שמספקים זיהוי ליישום האפליקציה והסימנים האותנטיים לסימני הרשאה של האפליקציה. במילים אחרות, הם מזהים את היישומים המערערים את השרת ואם היישומים המתקשרים קיבלו את הגישה לשרת הAPI. הם משמשים לעקבות אחר כל הפעילויות ולבלוע כל התנהגויות מושחתות.
אמונה במפתחים היא להתייחס לחומר המועדף של HTTP basic authentication, שהוא בעיה עיקרית באופן זה. היא עשויה להיות בשימוש בשני מטרות. הצעד הראשון הוא לזהות את היישום המערער, שמתקשר לAPI האחורית שלך. הצעד השני הוא סימני הרשאה ליישום האפליקציה, שקובע אם היישום המתקשר קיבל את ההסיעה לצורך קריאה לAPI.
API מפתחים מקבלים מספקי מפתחים נוהלים על יישומים אינטרנטיים.
היכן לאחסן מפתחים שלך
אף פעם אל תשים את מפתחיך בקוד או בקבצים מפני שהם יעלמו לאור הציבור כשתשלחו אותו ל GitHub, במקום זאת אחסן את מפתחיך במשתנה הסביבה.
דוגמא למפתח API עשויה להיראות בדיוק כך.
מפתח: a9nIbdnaoks97028Jlf.ains9NIKQMEO
מועתק גישה הוא מסמך בטחון שמשתמש בו כדי לאמת ולאפשר גישה ל API (שירות תכנות יישומים). התוקנים הם רק תעודות יישומיות ייחודיות עבור מביא התוקן שמורשה לגישה ל API.
הנה דוגמה למועתק גישה JSON (JWT):
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
זהו מועתק גישה JWT מורכב משלושה חלקים מפרידים בעקבות: הראש, המטען, והחתימה. הראש בדרך כלל מכיל מידע על אלגוריתם המשמש לחתימת המועתק, לדוגמה:
{
"alg": "HS256",
"typ": "JWT"
}
המטען מכיל טעמים או הצהרים על הייצוג (משתמש, לוקח שירות וכו') ויכול לכלל מידע כמו הסובך, הבעיל, הזמן המועד לספיקה, ומידע מותאם אישית. לדוגמה:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
החתימה יוצרה על ידי לוקחים את הראש המקודד, המטען, ומפתח סודי ויישם את האלגוריתם הקריפטוגרפי, כמו HMAC-SHA256. החתימה מובטחת את התומכות והאמת של המועתק.
בשי
אישור: בייר eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
שרת ה API יכול אז לאשר אמת התoken, לבדוק את התמותתו, ולהשתמש במידע הנמצא בתוכנית המטען עבור אישור ושאר המטרות.
שימו לב שהתoken הדוגמאות הזה שנתתי פה נועד רק למטרות ההצגה ולא צריך להשתמש בה בסביבה יישומית.
תokenים ומפתחים שונים בשימוש לאישור ולאחריות, אך הם שונים באופן הבא:
מפתחים לרוב משמשים עבור זיהוי הלקוח או היישומון ואישור בזמנים בו אתה מבקר על ה API. הם לרוב לוקחים צורה של משמרות אקראיות ארוכות שמשמשות כרישים. תokenים, מצד שני, נותנים ללקוחות או משתמשים מורשים אחרי תהליך האישור המצליח ומועיל כראיות לאישור.
תוחלת החיים: אם לא באופן מכוון יוחלץו או הועלטו על ידי מספק ה API, מפתחים לרוב יש תוחלת חיים ארוכה. תokenים, מצד שני, לרוב יש תמותתם קצרה ותאריך קיצוץ. לפי שיטה האישור המקרית, הלקוח חייב להיאשר מחדש או להשתמש בתoken הרענן כדי לקבל תoken חדש במקום התוקף של התoken הישן.
אבטחה: טוקנים מעניקים תכונות אבטחה טובות יותר בהשוואה למפתחים API. טוקנים יכולים להיעצם בתוך סקופים מוגבלים או רשימות הסמכויות, מאפשרים שליטה מפורט בגישה. הם יכולים גם להיות מצפצפים, חתומים או להכיל טענות נוספות שמספקות יושרה ומקוריות. זה מאפשר אבטחה יותר גדולה בהתחברות והגנה טוב יותר על מידע רגיש.
דוגמאות מהעולם האמיתי והשימושים
A. API המזג אוויר
API יוצרים של מזג אוויר, או תוכנות תעבורת תוכנות, הם שירותים שמאפשרים גישה ממשית בזמן אמת למידע והתחזיות המזג אוויריות.
דוגמאות כאלה כוללות
. WeatherAPI.com, Forecast, Meteostat.
B. API רשתות חברתיות
API רשתות חברתיות מאפשרות לרשתות אלה להדביק עם ספקי תוכנה אחרים ואפליקציות.
דוגמאות כאלה כוללות
API של תשתית תשלום
הממשק הטכנולוגי שמאפשר למפתחי תוכנה להשתלט עם שירותי תשתית תשלום באפליקציות או אתרים נקראים ל API של תשתית תשלום.
מדגימות כאלה בודקות
API של Stripe. Stripe היא שירות מאוד מושך שמאפשר למוכרים לקבל תשלומים ברשת, Noodlio Pay, API של Square, PayPal, Adyen, Paybook, KeyPay, BIPS הוצאה לחשבון (על-ידי Coinify).
D. API למפות וגאולוגיה
API הגאולוגיה אינה שומרת על מידע אבל מאפשרת לך לאסוף מידע קיים מהמכשיר שבו מבצעים השאלות. היא עשויה לאסוף מידע על המיקום ממקורות שונים, כולל כתובת IP, GPS, WiFi, Bluetooth, RFID, תעודת ID GSM/CDMA והקלט אנושי.
API הגיאולוגיהAPI MapboxAPI OpenStreetMapAPI MapQuestAPI HERE
IV. הסיכויים והלקחים
במהלך המאמר הזה, הבנו מה הם APIs, איך הם פועלים, דוגמאות מהעולם המקומי, APISecurity, שיטות הדרכים וחשיבות הAPIs. הסתבר שהAPI מאפשר למהנדסי תוכנה להדביק את היישומים המובנים ואפילו לשפר עליהם. במהלך המחקר והכתיבה שלי, גיליתי שיש בעיה גדולה באבטחת API. אם הAPI יישבץ, זה ישפיע על כל היישומים המחוברים אליו אז אני אמתן את המחקר הבא באבטחת API.
סוף סוף, אני אשחרר מאמר נוסף שקשור לזה בגלל שהוא יהיה על חקירת API, עבודה עם API בקוד, מיטבי הערך בשימוש בAPI, עיצוב ופיתוח של API.
A. מילים מפתחות
API – משטח משתמש ליישומים
RPC – קריאת רחוקה לשיחזור פוליציאלי
HTTP – פרוטוקול העברת הטקסט
B. השלבים הבאים ללמוד עוד
לבסוף, אני אשחרר עוד מאמר אחד על זה בגלל שהוא יהיה על חקירה באפיינים, עבודה עם אפיינים בקוד, מיטב הממרחבים של אפיינים, עיצוב ופיתוח של אפיינים.