Skip to content

Web service หรือ Web API สำคัญกับการพัฒนา Web application และ Mobile application ยังไง?

ถ้าใครที่คลุกคลีกับการทำเว็บมาตั้งแต่ยุคนั้นคงจะได้สัมผัสกับการทำเว็บไซต์ที่เริ่มตั้งแต่เป็นหน้าเว็บ HTML แห้งๆ อยากอัปเดตอะไรก็ต้อง FTP เข้าไปแก้ไขหน้า HTML เองจนจนมาถึงยุคที่ทุกอย่างเป็น dynamic ข้อมูลมีการเปลี่ยนแปลงตลอดเวลา ทุกอย่างเป็นไปอย่างอัตโนมัติด้วยโปรแกรม ฝั่ง user เองก็ได้รับประสบการณ์การใช้เว็บไซต์แบบใหม่คือสามารถเพิ่ม content ของตัวเองได้, แชร์ข้อมูลกับคนอื่นได้,  การพูดคุยกันแบบ real-time หรือแม้กระทั่งเป็นสื่อและเป็นเครื่องมือสำหรับทำธุรกิจ

เพื่อความสะดวกในการพัฒนาจึงต้องแยกการพัฒนาออกเป็น 2 ส่วนคือ Front-end และ Back-end

ส่วนฝั่ง developer เองก็ต้องพัฒนาทั้งทางด้านเทคนิคและกระบวนการทำงานด้วยเหมือนกัน ด้านเทคนิคที่ว่าก็คือภาษาโปรแกรมที่สามารถทำงานตามลอจิกสามารถรับ-ส่งข้อมูลผ่าน HTTP ซึ่งก็คือ CGI สมัยนั้นนิยมเขียนด้วย Perl จนมาถึงยุค PHP ที่สะดวกกว่า ง่ายกว่า ยืดหยุุ่นกว่าและถูกใช้มาเรื่อยๆ จนปัจจุบัน ฟีเจอร์เด็ดของ PHP ที่ทำให้เป็นที่นิยมคือสามารถเขียนแทรก tag HTML ได้แต่ก็กลายเป็นปัญหาในการพัฒนาภายหลังเพราะส่วนแสดงผลและลอจิกการทำงานผูกติดกันอยู่ ต่อมาแนวคิด MVC (Model-View-Controller) ซึ่งบอกว่าควรจะแยกส่วนแสดงผล (View) ส่วนที่แทนตัวข้อมูล (Model)  และส่วนลอจิกการทำงานของโปรแกรม (Controller) เมื่อแต่ละส่วนไม่ขึ้นต่อกันก็จะทำให้กระจายงานได้ดีขึ้น (ต่างคนต่างไปทำงานส่วนที่ได้รับมอบหมาย) ทำงานได้ไม่ต้องรอกัน การเพิ่ม/ลดอะไรในโปรเจกต์ทำได้สะดวกและยืดหยุ่นขึ้น จนเกิดเป็น layer ของการพัฒนาเว็บไซต์คือฝั่ง Front-end และ Back-end

Web service หรือ Web API เข้ามาแทรกตรงไหนใน MVC?

ถึงตอนนี้พอจะมองออกไหมครับว่า Web service หรือ Web API เข้ามาแทรกตรงไหนใน MVC?

คำตอบก็คือส่วน Model ครับ ความจริงแล้วแนวคิดนี้ไม่ใช่อะไรใหม่ก็อาศัยแนวคิดดั้งเดิมของการแชร์ข้อมูลระหว่างกันโดยการกำหนดโครงสร้าง รูปแบบของข้อมูลแล้วเวลาเรียกใช้งานก็เรียกใช้ผ่าน interface ที่กำหนดโดยไม่ต้องเข้าถึงตัวข้อมูลจริงๆ (API ของภาษาโปรแกรมก็ใช้แบบนี้) หรือฐานข้อมูลเลยซึ่งตรงนี้เป็นแนวคิดของพวก ORM (ตัวอย่างที่ดังหน่อยก็เช่น Java Hibernate) แต่ถ้าต้องการส่งข้อมูลผ่านเครือข่ายส่วนมากมักส่งด้วย message อันนี้แหละครับคือแนวคิด Web service หรือ Web API ที่เราคุ้นเคย แม้ข้อมูลจะเป็น String แต่ก็มีการนิยามตัวข้อมูลเป็นโครงสร้างบอกว่าส่วนไหนคืออะไรแทนที่จะใช้ Text เพียวๆ ก็มีการใช้ XML แทนหรือ JSON ซึ่งช่วงหลังนิยมใช้มากกว่าเพราะเข้าใจง่ายกว่าไม่มี ข้อมูลเล็กกว่าเพราะไม่มีชื่อ tag เปิด/ปิดเหมือน XML  แถมฝั่ง front-end ยังเอาไปใช้ได้ทันทีเพราะ JSON เป็นเหมือน object ของ JavaScript ซึ่งเป็นภาษาที่นิยมใช้ฝั่ง front-end แม้ว่า ORM หรือ Web service จะทำงานต่างกันแต่มีจุดประสงค์เดียวกันคือฝั่งที่เรียกใช้ไม่จำเป็นต้องรู้การทำงานเบื้องหลังเลย คือมีหน้าที่ใช้อย่างเดียวทำให้การทำงานสะดวกมากขึ้น ทำงานได้เร็วขึ้นเพราะ data ถูกเตรียมไว้ให้หมดแล้ว

Web service หรือ Web API เนี่ยมันดีกับการพัฒนา Web application และ Mobile application ยังไง?

เล่ามาซะยาวยืดแล้วตกลง Web service หรือ Web API เนี่ยมันดีกับการพัฒนา Web application และ Mobile application ยังไง? ผมขออธิบายเป็นข้อๆ ตามนี้แล้วกันครับ

1. Web service เดียว API เดียวใช้ได้ทั้ง Web application และ Mobile application

เมื่อเราแยกส่วนแสดงและส่วน data model ออกจากกันแล้ว ก็แล้วแต่เราแล้วหละครับว่าจะเอาไปแสดงผลแบบไหน แสดงผลบนอุปกรณ์อะไร สมมุติว่าเรามี Web service ให้บริการข้อมูลอยู่ตัวหนึ่ง เมื่อ request ไปจะได้ข้อมูลกลับคืนมาเป็น JSON  เมื่อนักพัฒนา web application, mobile application เรียกใช้จะได้ข้อมูล JSON กลับมา นักพัฒนาสามารถนำข้อมูลที่ได้นี้ไปแสดงผลต่อตามที่ออกแบบไว้ได้ ซึ่งหากเราออกแบบโครงสร้างของ JSON ดีๆ ก็สามารถจับโยนเข้า template engine render ง่ายๆ เลย

2. Front-end developer ทำงานสะดวกขึ้น

front-end developer != designer นะครับ แต่หมายถึงคนที่เอา HTML/CSS/JavaScript มาสร้างสรรค์ให้เป็น UI ตามที่ designer ออกแบบไว้ได้ อาวุธคู่กายของ คงหนีไม่พ้น JavaScript แต่ตัว JavaScript เองเป็นภาษาที่ทำงานบนเบราว์เซอร์ฝั่ง client  หมายความว่าเราไม่สามารถ query ข้อมูลจากฐานข้อมูลฝั่ง server ได้

แต่ถ้ามี web service หรือ web api ให้ front-end developer เรียกใช้ก็จะไม่มีปัญหานี้อีกต่อไปครับเพราะ สามารถเขียน AJAX ไปเรียกข้อมูลเอาไปแสดงผลได้เลย

3. Back-end developer ทำงานสะดวกขึ้น

ถึง Web service และ Web API จะทำงานฝั่ง server หรือ back-end อยู่แล้วแต่ application เดี๋ยวนี้มี layer การทำงานข้างหลังหลาย layer นะครับ ซึ่ง back-end developer แต่ละคนก็ใช่ว่าจะคุ้นเคยกับ database ทุกคนหรือคุ้นเคยดีแต่การเขียนคำสั่ง SQL บ่อยๆ ก็เป็นเรื่องน่าเบื่อหน่ายในการพัฒนาซอฟต์แวร์เหมือนกัน และการที่มี Web API ก็ช่วยให้การทำงานตรงนี้ง่ายขึ้นเหมือนกันเพราะ developer รู้แค่ว่าเมื่ออยากได้ข้อมูลต้อง request ไปที่ url ไหน service อะไรและ return อะไรมาบ้างก็พอแล้ว

 4. Project management สะดวกขึ้น

ลองนึกตามดูว่าถ้าทีมของเราซึ่งอาจประกอบไปด้วย  Project manager, System Analysis, Back-end developer และ Front-end developer ต้องทำแอปขึ้นมาสักแอปหนึ่ง เวลาวางแผนการทำงานถ้าเป็นระบบเดิมอาจต้องทำเป็น step 1-2-3 คือ design และ analysis ร่วมกันจากนั้นก็ให้ back-end developer ไปทำ front-end developer ก็ต้องรอจน back-end developer ทำเสร็จก่อนถึงจะทำต่อได้ซึ่งบางทีก็ใช้เวลามากโดยไม่จำเป็นเพราะงานบางอยากเราสามาถทำ parallel กันได้

สมมุติว่าเรามี Web API เป็น core หลักเป็นแกนกลางของระบบตอน design และ analysis ก็ออกแบบ fix ไปเลยว่า back-end ต้องคืนค่าอะไรบ้าง และ front-end ต้องส่งค่ายังไงบ้าง เสร็จแล้วก็สร้าง mock up ของข้อมูลเพื่อให้ front-end developer สามรถเอาไปทำงานต่อได้เสมอว่าเรียก service จาก back-end จริงๆ ส่วน back-end ก็พัฒนาข้างหลังไป เมื่อทั้ง 2 ส่วนทดสอบจนไม่เจอข้อผิดพลาดแล้วก็เปลี่ยน end-point ของ service ชี้ไปที่ service ที่ใช้งานจริง

จากที่อธิบายไปข้างต้นจะเห็นว่าฝั่ง front-end และ back-end จริงๆ แล้วก็สามารถทำงาน parallel กันไปได้ โดยไม่ต้องรอกันเลย การบริหารเวลาของ project manager ก็ทำได้ง่ายขึ้นเวลาที่ทำก็สั้นลง มีเวลา release ซอฟต์แวร์ให้ Tester ทดสอบแล้วรับ feedback มาแก้ไขได้อีก เวลาเอาไปใช้งานจริงข้อผิดพลาดจากโปรแกรมก็น้อยลง

5. ช่วยกระจายข้อมูลและเกิด Third party application มากมาย

Success story ในหัวข้อนี้ที่อยากจะยกตัวอย่างว่า Web API ทำให้เกิดการกระจายข้อมูลและ Third party application ได้ยังไง ลองนึกถึง RSS และ Social API ต่างๆ ดูครับ Web API นี้ไม่เพียงแต่จะใช้เป็น Private service เท่านั้นบางครั้งก็นำมาให้บริการเป็น Public service โดยการเปิด API ให้ developer เข้าถึงได้และนำข้อมูลไปใช้งานต่อซึ่งมีทั้งฟรีและเสียตังค์ ซึ่งปัจจุบันก็เป็นโมเดลธุรกิจแบบหนึ่งในการทำธุรกิจไอทีได้เหมือนกัน

6. ความปลอดภัยในการแชร์ข้อมูลกับคนอื่น

แต่ก่อนถ้าเราจะแชร์ข้อมูลเราทำยังไงกันบ้างครับ? วิธีที่นิยมทำกันคือการให้ username และ password ของ database ไปเลยซึ่งขัดกับหลัก security อย่างมาก หรือดีขึ้นมาหน่อยคือ set server เป็น user ชั่วคราวและเตรียมข้อมูลหลอกๆ ที่มีโครงสร้างเหมือนกับข้อมูลจริงไว้ให้แต่ก็เสียเวลามากเช่นกัน

โปรเจกต์บางโปรเจกต์จำเป็นต้องใช้คนจากภายนอกหรือ outsource ความปลอดภัยข้อมูลนอกจากจะป้องกันด้วยการทำสัญญาไม่เปิดเผยข้อมูลแล้ว การป้องกันทางเทคนิคก็ควรจะทำด้วยเหมือนกัน การเปิดให้เข้าถึงผ่าน Web service และ Web API ก็ช่วยเรื่องความปลอดภัยได้ระดับหนึ่งเพราะไม่ต้องยุ่งกับ database โดยตรง

7. การขยาย application (scaling) ทำได้ง่ายกว่า

ส่วนตัวผมเองมองว่าการ scale app ง่ายกว่าการ scale database เยอะครับ ไหนต้องมี master node, slave node หรือ read replica ซึ่งบางทีการใช้ read replica ก็อาจจะมี  replica lack ทำให้ข้อมูล ณ ช่วงเวลาหนึ่งไม่เหมือนกันเพราะ sync ยังไม่เสร็จ

หากเราใช้ api เราสามารถทำ horizontal scale ในระดับ application layer ได้โดยการ duplicate api server หลายๆ ตัวไว้หลัง load balance ได้เลย api server แต่ละตัวอาจจะมี cache ของตัวเองหรือใช้ cache server ร่วมกันก็ได้ในกรณีที่จำเป็นต้องแชร์ข้อมูลร่วมกัน ซึ่งการทำ cache นี้จะช่วยลดการใช้งาน database ลงจนอาจจะไม่ต้อง scale database ที่ยุ่งยากกว่า

สรุป

มาถึงตรงนี้ก็น่าจะพอนึกภาพออกนะครับว่า Web service หรือ Web API สำคัญกับการพัฒนา Web application และ Mobile application ยังไง ลองศึกษาและนำมาปรับใช้งานในการพัฒนาซอฟต์แวร์ดูครับเผื่อชีวิต developer ของท่านจะง่ายขึ้น 🙂

7 Comments

  1. เอก เอก

    เขียนดีเขียนกว้าง แต่อ่านแล้วจับใจความไม่ได้ สรุปไม่ได้อะไรเลย

    • Kor Kor

      ผมพยายามเขียนแยกเป็นข้อๆ แล้วนะครับ คิดว่าชัดเจนในระดับหนึ่งแล้ว ถ้ามีส่วนไหนไม่เข้าใจหรือติชม แลกเปลี่ยนกันก็ยินดีครับ

  2. Surawan Satchukorn Surawan Satchukorn

    สนใจครับ ติดต่อได้ที่ไหนครับ
    อยากเขียนเว็บ API จาก Taobao
    ติดต่อมาด้วยครับ

    • Kor Kor

      ยังไงคุยรายละเอียดกันก่อนทางอีเมล korkeat.w(at)gmail(dot)com ได้นะครับ
      แต่เข้าใจว่า API ของ ​Taobao ยังมีแค่ภาษาจีนอยู่

  3. บุรุษนิรนาม บุรุษนิรนาม

    เขียนได้ดีมากครับ อธิบายชัดเจน ชอบ ๆ ๆ ๆ อ่านจากที่อื่นแล้วงง ฮ่าๆๆ

  4. Amornthep Amata Amornthep Amata

    เหมาะกับคนที่เคยเขียนมาแล้ว อ่านแล้วก็เหมือนปรับความเข้าใจ

    *ไม่เหมาะกับคนที่ไม่มีความรู้ด้านAPI หรือคนที่หัดเขียน เพราอ่านแล้วจะงงมาก
    เพราะคนเขียน เขียนตามความเข้าใจตัวเอง ทำให้บางประโยค ไม่ใส่ประธานหรือกรรม ทำให้อ่านแล้วงง
    เช่น
    “สมมุติว่าเรามี Web service ให้บริการข้อมูลอยู่ตัวหนึ่ง request ไปจะได้ข้อมูลกลับคืนมาเป็น JSON นักพัฒนา web application หรือ mobile application ”

    ประโยคเต็มๆควรจะเป็น “สมมุติว่าเรามี Web service ให้บริการข้อมูลอยู่ตัวหนึ่ง เมื่อFront-end request ไปที่Api ตั Apiจะส่งข้อมูลกลับคืนมาเป็น JSON นักพัฒนา web application หรือ mobile application ”
    แบบนี้ถึงจะไม่งง
    นี่แค่ตัวอย่าง มีอีกหลายประโยคเลยที่กำกวม

    • Kor Kor

      ขอบคุณสำหรับ feedback ครับ เรื่องการสื่อความบางประโยคผมจะนำไปปรับปรุงเพื่อให้คนอ่านเข้าใจยิ่งขึ้น

      ส่วนประเด็นเรื่องไม่เหมาะกับคนที่ไม่มีความรู้เรื่อง API หรือหัดเขียน API ส่วนนี้ผมขออนุญาตไม่เขียนอธิบายคำศัพท์หรือการทำงานเพิ่มเติมครับเพราะความตั้งใจเขียนแนว technical แต่แรกแล้ว 🙂

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.