• Courses
    Introduction LearnPress – LMS plugin

    Introduction LearnPress – LMS plugin

    Free
    อ่านเพิ่มเติม
  • Features
    • Membership
    • Portfolio
    • About Us
    • FAQs
    • Sidebar Shop
    • 404 Page
  • Events
  • Gallery
  • Blog
  • Contact
  • Shop
    มีคำถามเกี่ยวกับ odoo ?
    (063) 5525296
    info@odoothaidev.com
    Login
    Odoothaidev - We are Odoo professional in ThailandOdoothaidev - We are Odoo professional in Thailand
    • Courses
      Introduction LearnPress – LMS plugin

      Introduction LearnPress – LMS plugin

      Free
      อ่านเพิ่มเติม
    • Features
      • Membership
      • Portfolio
      • About Us
      • FAQs
      • Sidebar Shop
      • 404 Page
    • Events
    • Gallery
    • Blog
    • Contact
    • Shop

      API

      • บ้าน
      • บล็อก
      • API
      • การพัฒนา API อย่างมืออาชีพ และทำไมต้อง RESTful Service

      การพัฒนา API อย่างมืออาชีพ และทำไมต้อง RESTful Service

      • โพสโดย admin
      • หมวดหมู่ API
      • วันที่ กรกฎาคม 26, 2019
      • ความคิดเห็น 0 ความคิดเห็น

      API คืออะไร?
      API ย่อมาจาก Application Programming Interface คือการพัฒนาโปรแกรมสำหรับเป็นส่วนติดต่อเซอร์วิสของแอพพลิเคชั่น หรือโมดูลต่างๆ เพื่อให้คนภายนอกมาเรียกใช้งาน หรือกล่าวอย่างง่ายๆ ก็คือการเขียนโปรแกรมเพื่อให้บริการสำหรับให้คนอื่นมาเรียกใช้งาน ซึ่งแนวคิดเรื่องการสร้าง API เพื่อการใช้งานก็มีมาอย่างยาวนานแล้ว ยกตัวอย่างเช่นตั้งแต่ที่มีการสร้างระบบปฎิบัติการ (OS) ก็จะมีการติดต่อ API ของไดร์เวอร์อุปกรณ์ฮาร์แวร์ต่างๆ ของเครื่องคอมพิวเตอร์เพื่อเรียกใช้งานอุปกรณ์นั้นๆ ตามคำสั่งของนักพัฒนา

      API ได้รับการกล่าวถึงและอ้างอิงอีกครั้งในรูปแบบของเว็บเซอร์วิสเทคโนโลยี (Web Service) ซึ่งก็คือเราสามารถพัฒนาแอพพลิเคชั่นที่ให้บริการข้อมูลบนโปรโตคอล HTTP โดยใช้หลักการและแนวคิดของ API เพื่อให้คนภายนอกมาเรียกใช้งาน คำถามก็คือว่าทำไมเราต้องเพิ่ม API ลงในระบบของเรา? มีเหตุผล 3 ข้อ คือ

      • เราต้องการเปิดให้โมดูลหรือระบบอื่นๆ เข้ามาเรียกใช้ข้อมูลของเราได้
      • เราต้องการเตรียมข้อมูลให้เว็บไซต์ในรูปแบบ Asynchronous เช่น การใช้ AJAX
      • เราต้องการเตรียมโครงสร้างพื้นฐานสำหรับการทำสถาปัตยกรรมเชิงเซอร์วิส หรือ SOA (Service-Oriented Architecture)

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

       

      หลักคิดในการพัฒนา API

      ต้องเข้าใจก่อนว่าเทรนการพัฒนาเว็บแอพพลิเคชั่นในยุคปัจจุบันนั้นเปลี่ยนแปลงไปจากเมื่อก่อนเป็นอย่างมาก เนื่องด้วยการเติบโตอย่างก้าวกระโดดของโมบายดีไวซ์ก็คือโทรศัพท์มือถือแบบสมาร์โฟน โดยเฉพาะการที่โทรศัพท์มือถือสามารถเข้าถึงอินเตอร์เน็ตได้ การทำให้เว็บแอพพลิเคชั่นจะต้องสามารถแสดงผลได้อย่างรวดเร็วและได้ทุกขนาดหน้าจอจึงเป็นเรื่องยากลำบากมากในช่วงแรก แต่ ณ ปัจจุบันปัญหาเหล่านี้ก็ค่อยๆ ลดลงอย่างต่อเนื่องเพราะมีผู้คิดค้นเครื่องมือการพัฒนาเว็บแอพพลิเคชั่นทั้ง Framework, Library และออกแบบสถาปัตยกรรมที่เหมาะสมกับโมบายแอพพลิเคชั่นโดยเฉพาะ

      แท้จริงแล้วหัวใจหลักของการพัฒนา API คือการใช้แนวคิดด้านสถาปัตยกรรมเชิงเซอร์วิส  SOA (Service-Oriented Architecture) เพื่อประยุกต์ใช้ออกแบบที่จะดึงความสามารถศักยภาพให้เว็บแอพพลิเคชั่นสามารถตอบโจทย์ปัญหาในยุคที่ไคลเอนต์ (Client) ที่มีจำนวนมหาศาลและหลากหลาย หากวันนี้ถ้ายังคงใช้แนวคิดและวิธีการแบบเดิมๆ เชื่อว่าเว็บแอพพลิเคชั่นอย่าง Facebook  คงยังไม่สามารถรองรับผู้ใช้งานมหาศาลจำนวนกว่าหนึ่งพันห้าร้อยล้านจากคนทั่วโลกได้

      Capturenew

      SOA จะถูกสร้างอยู่บนชั้นของเซอร์วิสในที่นี้คือ Application Service Layer ซึ่งเป็นที่รวมของฟังก์ชั่นการทำงานของระบบ และเซอร์วิสเหล่านั้นจะไม่มีการเชื่อมต่อกับส่วนแสดงผลโดยตรง นั้นแสดงว่าในส่วงของการแสดงผล (Presentation Layer) จะเป็นอะไรก็ได้ ไม่ว่าจะเป็นหน้าเว็บบน PC, iPhone App, Android App หรือ ระบบอื่นๆ ดังรูป ทำให้ระบบมีความยืดหยุ่นและสามารถขยายตัวได้อย่างสูง สามารถรองรับการโหลดของไคลเอนต์ ได้อย่างไม่จำกัดและมีประสิทธิภาพ เช่น การยกเอาชั้นเซอร์วิสไปรันไว้บนการประมวลผลแบบกลุ่มเมฆ (cloud) เพื่อให้เกิดการขยายตัวได้อย่างสูงสุด

       

      ประเภทของเซอร์วิส

      กล่าวมาถึงตรงนี้หลายท่านคงยังนึกภาพไม่ออก เพื่อให้เห็นภาพอย่างได้ชัดเจนมากยิ่งขึ้นขอยกตัวอย่าง เช่น ปกติแล้วถ้าเราต้องการสร้างเว็บไซต์ซักหนึ่งเว็บเพจ เพื่อให้คนทั่วไปได้อ่านและเข้าใจได้เราต้องใช้ภาษา HTML ในการสร้างและแสดงผลหน้าเว็บ แต่ถ้าเราต้องการสร้างเว็บเซอร์วิสเป้าหมายของเราจะไม่ใช่คนทั่วๆไปแล้ว แต่จะเปลี่ยนเป็นเครื่องคอมพิวเตอร์มาอ่านแล้วเข้าใจแทน ซึ่งต้องเปลี่ยนจาก HTML เป็นรูปแบบของ JSON หรือ XML แทน ที่เป็นรูปแบบของข้อมูลมาตรฐานเพื่อใช้แลกเปลี่ยนระหว่างกันของระบบคอมพิวเตอร์

      นอกเหนือจากนักพัฒนาเว็บเซอร์วิสจะต้องมีความรู้ของรูปแบบของข้อมูล JSON หรือ XML แล้ว นักพัฒนาจะต้องมีความรู้ความเข้าใจศึกษาเรื่องรายละเอียดกระบวนการทำงานพื้นฐานของ HTTP ซึ่งเปรียบเสมือนตัวกลางที่ใช้สำหรับรับส่งข้อมูลของเว็บรีเควสต์ (Request) และเรสพอนต์ (Response) โดยเราจะอาศัยข้อมูลที่ถูกส่งซึ่งประกอบด้วยเมต้าเดต้าจำนวนมากมาใช้เป็นข้อมูลพื้นฐานในการสร้างออกแบบเว็บเซอร์วิส ได้แก่ รหัสสถานะของ HTTP, Header HTTP, คำสั่ง ของ HTTP เป็นต้น ซึ่งผมไม่ขอลงรายละเอียดสำหรับเรื่องนี้นะครับ

      ประเภทของเว็บเซอร์วิสโปรโตดคอลที่ทำงานอยู่บน HTTP ที่ได้รับความนิยมปัจจุบัน ได้แก่

      • RPC การทำงานจะเหมือนการเรียกใช้ฟังก์ชั่นและการส่งพารามิเตอร์ไปให้ตรงตามจำนวนที่เว็บเซอร์วิสต้องการ ซึ่งเราจะเห็นการทำงานของ RPC ในรูปแบบของ XML-RPC หรือ JSON-RPC
      • SOAP (Simple Object Access Protocol) เป็นเซอร์วิสที่ต่อยอดมาจาก XML-RPC มีมาตรฐานการร่างเซอร์วิสที่เป็นทางการ ตัวเซอร์วิสของ SOAP จำเป็นต้องมี WSDL (Web Service Description Language) เพื่อใช้อธิบายฟังก์ชั่นการทำงานของเว็บเซอร์วิสนั้น ปัจจุบันโปรแกรมมิ่งหลายๆ ภาษาได้เตรียมไลบราบี่สำหรับการทำงานกับ SOAP เพื่ออำนวยความสะดวกไม่ให้มันใช้งานยากจนเกินไป
      • REST (REpresentational Sate Transfer) มันเองไม่ใช่โปรโตคอล กล่าวได้ว่า REST เป็นเรื่องของหลักการออกแบบมากกว่า เพราะตัวมันเป็นอินเตอร์เฟส และพร้อมทั้งมีฟอร์แมตของข้อมูลตัวเอง (ในความเข้าใจของผม REST คือการประยุกต์ความรู้และต่อยอดความสามารถของ HTTP บวกความรู้การออกแบบเรื่อง Design Pattern โดยใช้รูปแบบข้อมูล JSON เป็นหลักในการดำเนินงาน)โดยที่ REST เองจะมีส่วนประกอบหลัก 2 ตัวคือ รีซอร์ส (Resource) และแอกชั่น (Action) ที่สามารถทำได้กับรีซอร์สนั้นๆ โดยแอกชั่นเหล่านั้นจะเกิดขึ้นได้ด้วยการส่งเวิร์บ (Verb) ที่ถูกต้องมาที่รีซอร์นั้นๆ

      เทรนของการใช้เซอร์วิส ณ ปัจจุบัน รูปแบบเซอร์วิสด้วยแนวคิดแบบ REST เป็นที่นิยมอย่างกว้างขว้างนั้นคือ “RESTful Service” ด้วยเหตุผลเพราะด้วยความเรียบง่ายเรื่องกระบวนการทำงาน โดยใช้ความสามารถของ HTTP ซึ่งเป็นพื้นฐานของเทคโนโลยีเว็บซึ่งสามารถทำงานได้ทุกแพตฟอร์มอยู่แล้ว โดยตัว REST เองเป็นกระบวนการเปิดซอร์วิส CRUD (Create, Read*, Update, Delete) มีความสัมพันธ์กับข้อมูลที่แข็งแกร่งมาก จุดเด่นสำคัญในเรื่องของการออกแบบมาเพื่อให้ lightweight คือมีน้ำหนักเบา เหมาะที่จะถูกนำไปเป็นชั้นของเซอร์วิสในสถายปัตยกรรมเชิงเซอร์วิสเป็นอย่างมาก ทำให้การใช้ทรัพยากรและพลังงานของเครื่องแม่ข่ายน้อยมากเมื่อเปรียบกับแบบอื่น และรองรับการเรียกใช้งานของเครื่องลูกข่ายได้เป็นจำนวนมาก

       

      สรุปสุดท้ายทำไมต้อง RESTful

      สิ่งที่เหนือกว่าคือ url ที่สวยงาม การเรียกใช้งานเซอร์วิสสามารถทำผ่านได้ง่ายจาก URL สาเหตุที่ต้องใช้ URL เพราะใน RESTful จะมองข้อมูลที่ให้บริการเป็นรีซอร์ส (resource) เหมาะสมกับยุคของข้อมูลในปัจจุบันที่มีรูปแบบของข้อมูลที่หลากหลายโดยเฉพาะการเก็บข้อมูลลงในฐานข้อมูลแบบ NoSQL ซึ่งจะเรียกว่าคอลเล็กชั่น ตัวอย่างเช่น คอลเล็กชั่น user, product, order, category (ให้ลองศึกษาเรื่องของ NoSQL เพื่อให้เข้าใจยิ่งขึ้น)

      ตัวอย่างการใช้งาน (ผลลัพท์จะเป็นรูปแบบข้อมูล JSON) เช่น

      -ต้องการดึงข้อมูลของสินค้าทั้งหมด

      http://exmaple.com/product/

      -สำหรับรีซอร์สตัวใดตัวใดตัวหนึ่งที่จำเพาะเจาะจง เช่น ดึงข้อมูลของสินค้าที่มีรหัสลำดับที่ 72

      http://exmaple.com/product/72

      -และหากต้องการดึงอิลิเมนต์ย่อยภายใต้ตัวหลักออกมา เช่น ดึงข้อมูลของสินค้าที่มีรหัสลำดับที่ 72 และดูเฉพาะชื่อสินค้า

      http://exmaple.com/product/72/name

      ทั้งหมดนี้เป็นเรื่องราวส่วนหนึ่งของการพัฒนาเซอร์วิสแบบ RESTful ซึ่งยังมีรายละเอียดในส่วนอื่นๆ อีกมากมาย ซึ่งปัจจุบันมีนักพัฒนาได้สร้างเครื่องมือหรือที่เรียกว่า Framework สำหรับสร้าง RESTful ขึ้นมาโดยเฉพาะสามารถให้นำไปใช้งานกันได้อย่างสะดวกสบาย เช่น Slim Framework และมีตัวอื่นๆ อีกมากมายที่ได้รับความนิยม ลองค้นหาใน Google โดยใช้คำค้นว่า “Micro Framework” ตอนหน้าจะเป็นตัวอย่างการพัฒนา RESTful แบบง่ายๆ ด้วยภาษา PHP แต่ทั้งนี้ตัว RESTful เองสามารถพัฒนาได้หลากหลายภาษาที่ได้รับความนิยม ได้แก่ JavaScript, Python เป็นต้น รวมไปถึงหลักการพื้นฐานและการสร้างความปลอดภัยให้กับตัวเซอร์วิส RESTful ด้วยครับ ?

       

      (*แหล่งข้อมูลเขียน Replace แต่จะประสบการณ์ของผู้เขียนน่าจะเป็น Read มากกว่า)

      ข้อมูลอ้างอิง:

      มิทเชลล์ ลอร์นา. เขียนโค้ค PHP อย่างมืออาชีพ. กรุงเทพฯ: ซีเอ็ดยูเคชั่น, 2556 (หน้า 91-140)

      แท็ก:api

      • แบ่งปัน:
      อวตารของผู้แต่ง
      admin

      โพสต์ก่อนหน้า

      JSON-RPC กับภาษา Python
      กรกฎาคม 26, 2019

      โพสต์ถัดไป

      BUSINESS INTELLIGENCE SOLUTIONS
      กรกฎาคม 27, 2019

      ทิ้งคำตอบไว้ ยกเลิกการตอบ

      อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น

      Search

      หมวดหมู่

      • Accounting
      • Adobe XD
      • API
      • Blog
      • Business
      • Buttons
      • CRM
      • Custom Fields
      • Design / Branding
      • Django
      • Ecommerce
      • ERP
      • Express
      • Form View
      • Frontend
      • Grant Chart
      • Header
      • iReport
      • Jasper Server & Server
      • Jaspersoft Studio
      • Java
      • JSON-RPC
      • Linux
      • MRP
      • NodeJS
      • Odoo 10
      • Odoo 12 Module
      • Odoo 13
      • Odoo 8
      • Odoo 9
      • Odoo API
      • Odoo Developer
      • Odoo Ebook
      • Odoo ERP
      • Odoo Event
      • Odoo Report
      • Open-office
      • OpenERP 7.0
      • PhantomJS
      • Postgres SQL
      • Programming Language
      • Project Management
      • Python
      • Qweb
      • Reporting ระบบรายงาน
      • RML Report
      • Search View and Filters
      • Statusbar
      • Ubuntu
      • Uncategorized
      • Voip & Call Center
      • Warehouse Management
      • WMS
      • Woocommerce
      • XML-RPC
      • การ Implement
      • การเก็บข้อมูล Pre-Requirement
      • การเตรียมตัวเพื่อใช้งาน erp
      • ธีมเว็บไซต์ Odoo
      • ธุรกิจบริการ
      • ธุรกิจประเภทจัดอบรมสัมมนา
      • ธุรกิจสิ่งพิมพ์
      • ประเภทธุรกิจที่เหมาะกับ Odoo
      • ระบบบัญชี
      • ระบบเคลม

      หลักสูตรล่าสุด

      Introduction LearnPress – LMS plugin

      Introduction LearnPress – LMS plugin

      Free
      From Zero to Hero with Nodejs

      From Zero to Hero with Nodejs

      Free
      Learn Python – Interactive Python

      Learn Python – Interactive Python

      $69.00
      (00) 123 456 789
      hello@eduma.com
      Facebook
      Twitter
      Google-plus
      Pinterest

      Education WordPress Theme by ThimPress. Powered by WordPress.

      • Privacy
      • Terms
      • Sitemap
      • Purchase

      เข้าสู่ระบบด้วยบัญชีไซต์ของคุณ

      ลืมรหัสผ่าน?