דיון: PHP's RESTFUL API - Symfony vs. Yii

garfiled22

New member
דיון: PHP's RESTFUL API - Symfony vs. Yii

שלום לכולם,

בימים אלו אני מתכנן הקמה של API מבוסס RESTFUL, הוא אמור להיות כתוב ב - PHP ואמור להיות מודולרי מאוד והמודולים אמורים להיות מאוד loosely coupled.
קראתי קצת וכרגע עומדים על הפרק 2 פרייםוורקים: Yii ו - Symfony לשניהם יש תוספות (אקסטנשיין \ BUNDLE) לזה ושניהם נראים טוב.
אשמח לשמוע ממי שהתנסה איתם בנוגע ליתרונות \ חסרונות.

תודה רבה!
 

Mr360

New member
YII

עבדתי ועובד עם YII... לא מכיר חסרונות בנתיים... אולי זה שהיא לא יודעת לעשות קפה.

מצד שני אני לא מכיר את סימפוני...
שיהיה בהצלחה בכל אופן :)
 

garfiled22

New member
תודה רבה!

למען האמת אני גם נוטה יותר לשם, זה אחד הפרייוורקים הכי אינטואיטיבים שפגשתי עד היום (ויש לי נסיון עם ZEND, FAT FREE, CI וקצת עם סימפוני).

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

amitayh

New member
אני הייתי בוחר דווקא בסימפוני...

לדעתי ה-FW הכי מודרנית שיש היום ל-PHP, מתחברת בקלות עם ספריות צד ג', דגש חזק על אבני הבניין הבסיסיות ביותר (אפילו לפני ה web framework) ולכן מתאימה למגוון משימות - אפילו לא רק אתרים או אפליקציות ווב.
 

gilmad

New member
אתה יכול להרחיב? (איפה החוזק שלה)

מה זאת אומרת "דגש חזק על אבני הבניין הבסיסיות ביותר"?
דוגמא לספריות צד ג'?

תודה!
 

amitayh

New member
בהחלט

הדגש העיקרי בסימפוני הוא הרכיבים - Components:
http://symfony.com/doc/current/components/index.html

מדובר במספר ספריות מאוד loosely coupled (ניתן להשתמש בכל אחת מהן בצורה כמעט עצמאית לחלוטין). בהקשר של ווב (שהוא העיקרי) הרכיב החשוב ביותר הוא ה - HttpFoundation שנותן API אובג'קט אוריינטד לכל העבודה מול פרוטוקול ה-HTTP: עבודה עם request/response, קוקיז, קבצים, HTTP cache, ועוד..

על גבי הרכיבים האלה נבנתה ה- full stack framework, שכל מה שהיא עושה בעצם זה לקשור בין הרכיבים השונים, לספק קונפיגורציה ומבנה. את הדברים האלה עושים עם "bundles" - לכל באנדל תפקיד מוגדר ונותן לאפליקציה שלך פיצ'רים ספציפים. למעשה ה"אפליקציה" שלך היא אוסף של באנדלים וקונפיגורציות. דוגמאות לבאנדלים:
security bundle
use bundle
doctrine bundle - עבודה עם דטא-בייס, ORM
mongodb bundle - אינטגרציה עם מונגו
admin bundle - ייצור ממשק אדמין אוטומטי
rest bundle - שזה מה שפותח השרשור כנראה צריך
והרשימה נמשכת...
http://knpbundles.com/

רק כדי להבין כמה הקונספט של הרכיבים חזק, אפילו הפריימוורק עצמו נחשב באנדל (!) אתה לא חייב להשתמש בפריימוורק הגדול אם אתה צריך פרוייקט קטן ופשוט - יש גם מיקרו פריימוורק שנבנה על אותם רכיבים ונותן לך להתחיל בפשטות ומהירות:
http://silex.sensiolabs.org/

בגלל הפילוסופיה הזאת, השילוב עם ספריות צד ג' הוא מאוד טבעי וכבר רבים וטובים הרימו את הכפפה. הנה כמה דוגמאות לספריות שמשתלבות בצורה מאוד פשוטה עם סימפוני:
SwiftMailer - שליחת מיילים
Doctrine2 - דטאבייס ו-ORM
Monolog - לוגינג
Assetic - ניהול קבצי JS/CSS
Knp Menu - יצירת תפריטים
...

את כל הניהול של הרכיבים/גרסאות מנהלים בקלות בעזרת composer, שהופך להיות dependency manager דה-פקטו ב-PHP:
http://getcomposer.org/

כמובן שכל הקוד מותאם ל- PHP 5.3 ומעלה, ומכוסה היטב ע"י בדיקות יחידה.
 

garfiled22

New member
ומה עם דוקומנטציות?

דברים שבדקות נפתרים ב - YII לוקח שעות לפעמים להבין איך עושים בסימפוני ויש מקרים שבהם אין בכלל תיעוד ואז מתחילים REVERSE ENGINEERING.
זה מאוד מעיק!
 

garfiled22

New member
בטח

1. YAML - אחד הדברים הכי לא אינטואיטיבים בעולם (עדיף כבר INI כמו בזנד)
2. איך עובדים עם קבצי קונפיגורציה - לקח לי שעות להבין עד שמצאתי את מה שאני צריך, ב - YII תוך דקות אתה כבר מוצא מאמר \ דוקומנטציה שמסבירה
3. הורדתי בנדל של RESTFUL (FOSRESTBUNDLE) - כמובן שיש לו דוקומנטציה חרא, אבל הרי הוא מבוסס על מתודולוגיות של סימפוני, ניסיתי להבין מה המתודולוגיות, נאדה! כל דבר אתה מתחיל REVERSE ENGINEERING בקוד, עד שאתה מגלה באיזה מחלקה מתשמשים ואז, בסיכוי של 50% תמצא דוקומנטציה עליה.

ואני רק בהתחלה, עוד לא הגעתי לORM (DOCTRINE) ולא הגעתי למערכת טמפלטים (TWIG) וכבר אני סובל מאוד..
ב - YII, אתה גם יכול לחבר את DOCTRINE, גם את TWIG והכל בשניות ספורות! (כבר עשיתי את שניהם)

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

amitayh

New member
לכל דבר יש עקומת למידה

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

1. YAML - בלי קשר לסימפוני, משתמשים בה בהרבה מקומות אחרים (ממה שנתקלתי אנשי רובי אוהבים אותה). מה גם שסימפוני לא מחייבת אותך להשתמש בקונפיגורצית YAML - אפשר גם XML או PHP רגיל.
2. מה שאמרתי בהתחלה...
3. מן הסתם אי אפשר להתחייב על דוקומנטציה לבאנדלים (כי לא בהכרח כותבי סימפוני כתבו אותם), אבל מסכים איתך שיש הרבה מקום לשיפור פה

נ.ב אינטגרציה מלאה ל - Twig ו - Doctrine כבר מובנית ב - full stack framework
 

garfiled22

New member
נכון

רק 2 דברים:
1. דרופל, ג'ומלה - לא פרייוורקים אלא מערכות עם מימושים לפונקציונאליות ולכן הרבה יותר ארוך ללמוד אותם, פרייםוורק זה סט כלים ומערכות כדי שהפונקציונאליות שלך תוכל להכתב מהר יותר וטוב יותר, לכן פרייםוורק אור להקלט הרבה יותר מהר מ - דרופל, ג'ומלה.
תאמין לי שלמדתי המון מערכות חדשות עד היום מורכבות ביותר והם נקלטו במהירות, פה משום מה הכל קשה, כל דבר חדש לא רץ בפעם הראשונה ואז אתה חוזר ומנסה להבין, נכנס לקוד שלהם ומתחיל להדפיס, הולך לדוקומנטציה למחצה שמצאת (אחרי פתיחת השושנה) ומגלה עוד פרט ושוב לא עובד וחוזר חלילה עד שבסוף משהו קטן רץ לך..
פרייםוורק אמור להקל לא להעיק, לכן נראה לי שעם כל זה שה - RESTRICTIONS ב - YII פחות חמורים אני אלך עליו, הדילוור של מערכת יותר חשוב מהעקומת למידה ברגע שהיחס בינהם גודל.

תודה רבה בכל מקרה על ההסברים, היו כמה דברים שהארת את עיני!
 

amitayh

New member
בכיף

בסופו של דבר אתה אמור ללכת לפי ההעדפה שלך

בהצלחה!
 

barnyrebal

New member
לא מדויייק

ג'ומלה היא FW לכל ענין, יתרה על כך החל מגרסא 2.5 (הגרסא היציבה הנוכחית) ה CMS מופרד מה FW ואתה יכול להשתמש ב FW בצורה עצמאית.
(ל FW קוראים באופון מפתיע Joomla FW :) )
 

barnyrebal

New member
גרסא 2.5 מכילה כמעט כל מה שאתה רוצה מ FW

החל מ MVC וכלה בכל מיני תוספים, פלאג אינים וכיו"ב. (גרסא 3 כבר הולכת לכיוון של HMVC)
בנוסף יש לה יתרונות שלא ראיתי במערכת אחרות, כגון מערכת TEMPLATE מאוד נוחה לשימוש (הן ברמת המפתח והן ברמת המשתמש),
ואי אפשר גם לא לציין את ה 10,000 הרחבות בשלל תחומים.

לפי מה שאני רואה, אחד המינוסים הגדולים הוא דווקא בכיוון התדמיתי שהיא נתפסת כמערכת CMS ולא כסביבת פיתוח....
במערכות שפיתיחתי (אתרים משולבים במערכות CUSTOM) היה לי מאוד נוח ודי מהר יכולתי להתמקד בפיתוח של הליבה של הדברים ולא להתעסק במסביב (החל מתבנית מוכנה וכלה ברישום משתמשים ובמערכת ניהול).
כמו כן, לפי ההשוואות שעושים טוענים שהיא טובה לעמוסים החלק מקטן וכלה בבינוני-גדול ולא לגדול ומעלה.

אתה יכול לקורא סקירה קצרה שכתבתי (מזמן, בינתיים כבר הרבה דברים התעדכנו והתקדמו).

www.weba.co.il/מאמרים-ומדריכים-לג-ומלה/ג-ומלה-כתשתית-פיתוח-לאפליקציות-PHP-Framework.html
 

garfiled22

New member
תשמע..

ממבט מהיר במאמר שלך, היא דומה מאוד מבחינת המאפיינים ל - YII, גם AR, גם EDP, שאלו 2 דברים שכנראה נלקחו מ - ROR (כמו ב - YII) - נשמע טוב ושווה ניסיון!!

ד"א, המערכת טמפלטים שלדעתי הכי טובה היא TWIG (מיוצרי SYMFONY) ואחריה mustache, לכן קשה לי להאמין ששם זה יותר טוב, ד"א, ב - TWIG יש מימוש לירושות בין טמפלטים וזה חזק ביותר (אם אני לא טובה הרעיון נלקח מ - DJANGO).

תודה!
 

amitayh

New member
Twig באמת מצויינת

ובאמת נבנתה בהשראת Django (זה פחות או יותר אותו סינטקס בדיוק)
ברגע שעבדת עם ירושה ב - templates קשה לחזור אחורה...

סתם הערה, כל קונספט ה"באנדלים" מאוד דומה לפילוסופיה של Django, והם גם לקחו הרבה רעיונות מ-FW אחרים כמו ספרינג של ג'אווה (DIC) ועוד.
 
למעלה