ถ้าใครที่คลุกคลีกับการทำเว็บมาตั้งแต่ยุคนั้นคงจะได้สัมผัสกับการทำเว็บไซต์ที่เริ่มตั้งแต่เป็นหน้าเว็บ 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 ก็เอาไป render แสดงผลต่อได้แล้ว ถ้าออกแบบโครงสร้างของ 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 ไปที่ไหนและ 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) ทำได้ง่ายกว่า

อย่างที่ผมได้บอกไปก่อนหน้านี้ครับว่า back-end มันมีหลาย layer ข้างหลัง URL ที่เราเรียกไปข้างหลังอาจจะมี server ซึ่งทำงานอยู่หลัง proxy, load balance อีกที ในกรณีที่มีการใช้งานเยอะเราอาจจะต้องเพิ่ม server ข้างหลังให้มากขึ้นเราก็สามารถเพิ่มเข้าไปได้เลยโดยที่ฝั่ง client ไม่จำเป็นต้องทำอะไรเพิ่มเลยครับเพราะเรียกใช้งานผ่าน URL ของ Proxy, load balance อยู่แล้ว
และด้วยความที่มันคุยกันด้วย message (String) นั่นก็หมายความว่านอกจากเราทำ cache ได้ตั้งแต่ database แล้วยังสามารถ cache ในอีก layer นึง จะใส่ซอฟต์แวร์สำหรับทำ cache พวก Memcached, Vanish  หรือ NoSQL อย่าง Redis ก็แล้วแต่จะออกแบบ นอกจากจะ cache ฝั่ง server ได้แล้วด้วยความที่เป็น String ก็ cache ที่ฝั่ง client ได้อีก การที่ทำ cache ได้หลาย layer แบบนี้ก็ทำให้ประสิทธิภาพโดยรวมของ  application ดีขึ้นตามไปด้วย

สรุป

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