API คืออะไร อธิบายหลักการทำงานและการใช้งาน API ฉบับเต็ม

API ย่อมาจาก Application Programming Interface คืออีกหนึ่งคำที่โปรแกรมเมอร์หรือชาว dev อย่างเรา ๆ คงได้ยินบ่อย ๆ แต่หลายคนก็อาจจะยังไม่เคลียร์หรือเข้าใจจริง ๆ ว่า แท้จริงแล้วมันคืออะไร หลักการทำงานเป็นอย่างไร เพราะการพัฒนา ซอฟต์แวร์ (Software)ในแต่ละวันนั้น เชื่อว่าหลายคนต้องคลุกคลีกับ API แทบจะทุกวันก็ว่าได้ครับ
บทความนี้ผมจะพาไปทำความเข้าใจภาพรวมของ API หวังว่าจะทำให้เพื่อน ๆ หรือคุณผู้อ่าน เข้าเข้าใจหลักการ จนสามารถนำความองค์ความรู้นี้ไปต่อยอดเพื่อใช้งาน API ได้เป็นอย่างดีครับ
API คืออะไร ?
API (Application Programming Interface) คือ ตัวกลางระหว่าง client และ server เพื่อทำหน้าที่เป็นส่วนผสาน (Interface) ระหว่างสองส่วนนี้ ในการแลกเปลี่ยนข้อมูลและการเชื่อมต่อกันระหว่างแอปพลิเคชัน (ให้เรามองว่า API คือการสื่อสารชนิดหนึ่ง) เราจะไม่เชื่อม client เข้ากับ database ที่อยู่หลังบ้านโดยตรง จะเอา API นี่แหละมาคั่นไว้เป็นตัวกลางคอยจัดการประสาน client และ server
แล้ว Client กับ Server มันคืออะไร?
Client: คือ ฝั่งที่มีการเรียกใช้งาน หรืออะไรก็ตามที่ต้องมีการ request เกิดขึ้น อย่างเช่น Web Browsers, Mobile App, etc เรามีการกดปุ่ม กดค้นหา กดอ่าน กดบันทึก หรือมี action อะไรก็ตามเกิดขึ้น เหล่านี้ล้วนต้องมีการร้องขอ (request) ไปยังฝั่ง server แทบทั้งสิ้น
Server: คือ ฝั่งของโปรแกรมที่เก็บหรือมีหน้าที่จัดการกับข้อมูล โดยฝั่ง server ก็จะรับ request มาจากฝั่ง client แล้วนำมาประมวลผลว่าฝั่ง client ร้องขออะไรมา แล้วส่งข้อมูลกลับไป
การพัฒนาส่วนต่าง ๆ เหล่านี้มักจะดำเนินการตาม SDLC (Software Development Life Cycle) ซึ่งเป็นกระบวนการที่มีการวางแผนและการพัฒนาซอฟต์แวร์อย่างเป็นระบบสำหรับมืออาชีพ
API Protocols
ประเภทของการสื่อสารของ API หรือที่เราเรียกว่า API Protocols นั้น โดยส่วนใหญ่ที่นิยมจะถูกแบ่งออกดังต่อไปนี้
- REST (Representational State Transfer):หรือเรียกได้อีกแบบว่า RESTful API เป็นรูปแบบที่ถูกใช้กันอย่างแพร่หลาย โดยจะขึ้นอยู่กับ HTTP Protocols คือ เช่น GET, POST, PUT, DELETE เป็นต้น โดย REST นั้นจะอยู่ในรูปแบบ stateless รองรับข้อมูลหลากหลายฟอร์แมตทั้ง JSON, XML, Text ฯลฯ
- SOAP (Simple Object Access Protocol):เป็นโปรโตคอลสำหรับแลกเปลี่ยนข้อมูลที่มักถูกใช้ในงาน Web Services ในรูปแบบของ XML ฟอร์แมต ทำงานได้ดีแม้จะต่าง environment ต่างภาษาโปรแกรมมิ่ง
- gRPC:เป็นโปรโตคอลสมัยใหม่ที่มีประสิทธิภาพสูงมาก โดยเหมาะสำหรับการแลกเปลี่ยนข้อมูลที่มีขนาดใหญ่ (Large Data Exchange) และมีข้อควรพิจารณาส่วนของ Bandwidth
นอกเหนือไปจากนี้ยังมีอีกหลายตัวที่ไม่ได้ถูกอธิบายในบทความนี้ เช่น GraphQL, JSON-RPC, XML-RPC เป็นต้น
HTTP Methods
การทำ RESTful API นั้นจะอยู่บนพื้นฐาน HTTP Methods และนี่คือ 5 เมธอดหลัก ๆ ที่ถูกใช้งานบ่อย ๆ ครับ
HTTP Methods | คำอธิบาย |
GET | ดึงข้อมูลมาแสดงผล |
POST | เพิ่ม บันทึกข้อมูล |
PUT | อัปเดตข้อมูล |
DELETE | ลบข้อมูล |
PATCH | แก้ไขข้อมูล (บางส่วน) |
มาถึงจุดนี้หลายคนน่าจะพอมองภาพออกบ้าง แต่ยังไม่สุด เดี๋ยวเรามาดูการใช้งานในชีวิตจริง เราจะได้มองภาพได้ชัดมากขึ้นครับ
ตัวอย่างการใช้งาน API ในชีวิตประจำวัน
- Social Media API: เชื่อว่าทุกคนน่าจะคุ้นชินกับปุ่ม Facebook แชร์ หรือคอมเมนต์ในเว็บไซต์ที่เราเข้าไปอ่านบทความใช่ไหมครับ ที่เราสามารถกดแชร์หรือคอมเมนต์ในบทความนั้น ๆ ได้ แต่เราได้พัฒนาส่วนนี้เองไหมครับ ก็ไม่ เพราะว่าเราเรียกใช้งาน API ของ Facebook นั่นเอง ตัวอย่าง Facebook API
- Weather API: ข้อมูลสภาพอากาศ ที่เราเห็นกันอยู่ทุกเมื่อเชื่อวัน ที่ปรากฎอยู่ในหลาย ๆ เว็บไซต์ เจ้าของเว็บเหล่านั้นเขาพัฒนาเองหรือไม่ ที่จะไปเก็บข้อมูลสภาพอากาศเหล่านั้น... ก็ไม่ เพราะว่าเขาได้เรียกใช้ Weather API จากผู้ให้บริการด้านนี้แล้วนั่นเอง
- Payment Gateway: ระบบชำระเงินหรือตัดบัตรในเว็บไซต์ E-commerce ต่าง ๆ ที่มีผู้ให้บริการอย่าง PayPal, Stripe เป็นต้น
ตัวอย่างการนำ API มาหรือปลั๊กอินของผู้ให้บริการมาใช้งานในเว็บไซต์
ตัวอย่างโค้ด API (Python)
import requests
# API endpoint URLurl = "https://api.example.com/endpoint"
# Request parameters (if any)params = { "param1": "value1", "param2": "value2"}
# Request headers (if any)headers = { "Authorization": "Bearer YOUR_API_TOKEN", "Content-Type": "application/json"}
# Make the GET requestresponse = requests.get(url, params=params, headers=headers)
# Check the response status codeif response.status_code == 200: # API call successful data = response.json() # Process the data or perform further operations print(data)else: # API call failed print("Error:", response.status_code) print("Response:", response.text)
จากตัวอย่างโค้ดด้านบนให้สังเกตตรง URL นั่นคือ รีซอร์สที่ผู้ให้บริการ API หรือเรียกว่า (API Provider) นั้นได้ออกแบบมาให้เราได้เรียกใช้แล้ว เราเรียกสิ่งนี้ว่า "API Endpoint"
คำถามคือ "แล้วแบบนี้ทุกคนก็สามารถใช้ API จาก URL นี้ได้น่ะสิ?" ... ก็ใช่ครับถ้า API นั้นเปิดแบบ public แต่ในการใช้งานเชิงการค้าส่วนใหญ่ ทางผู้ที่พัฒนา API นั้นก็จะต้องออกแบบมาเพื่อให้สำหรับคนที่จะได้รับอนุญาตการเข้าถึง API Endpoint ผ่านสิ่งที่มีชื่อว่า "API Token" ซึ่งเราจะต้องขอ Token จากผู้ให้บริการมาก่อน เมื่อได้แล้วจากนั้นเราจะแนบ Token ไปกับ HTTP Headers เวลามีการ request จากฝั่ง client (ฝั่งผู้ร้องขอ) จากนั้นฝั่ง API Back-end ก็จะรู้แล้วว่าเราสามารถเข้าถึงได้นะ ก็จะส่ง response ข้อมูลออกมาพร้อมกับ Status Code 200 ที่บ่งบอกว่าเราเรียกใช้งาน API Endpoint นี้ได้สำเร็จ
อ่านเพิ่มเติม: JWT (JSON Web Token)
API Status Code
API Status code คือตัวเลขที่ถูกส่งกลับจาก server ไปยัง client เพื่อแสดงสถานะของการดำเนินการที่เกิดขึ้นใน API โดยสถานะที่ส่งกลับจะเป็นตัวบอกถึงผลลัพธ์ของการร้องขอที่เกิดขึ้น โดยจะอยู่ในรูปแบบของตัวเลข 3 หลัก ซึ่งส่วนมากจะมีรหัสสถานะที่เป็นที่รู้จักกันมาก เช่น 200, 201, 404, 500 เป็นต้น
ตัวอย่าง API Status Code ที่พบได้บ่อย
Status Codes | คำอธิบาย |
200 | Success (การร้องขอสำเร็จ) |
201 | Created (ข้อมูลถูกบันทึกสำเร็จ) |
400 | Bad Request (มีข้อผิดพลาดที่ฝั่ง client ทำให้การร้องขอไม่สำเร็จ (ซึ่งไม่เกี่ยวกับฝั่ง server) |
401 | Unauthorized (ฝั่ง client ยังไม่ได้ยืนยันตัวตน เพื่อที่จะสามารถ request ข้อมูลจาก API Endpoint นี้ได้) |
403 | Forbidden (ฝั่ง Client ไม่มีสิทธิเข้าถึงหน้านี้) |
404 | Not Found (ไม่พบ resource ของหน้านี้) |
500 | Internal Error (เกิดข้อผิดพลาดภายในฝั่ง Server) |
Tip: จริง ๆ มีวิธีการสังเกต status code ครับ โดยสังเกตจาก prefix (คำนำหน้า) ได้ในเบื้องต้น โดยสังเกตจากเลขขึ้นต้น
วิธีสังเกตตัวเลข status codes (ให้สังเกตุตรง prefix)
- 2xx : บ่งบอกว่า สถานะของ API คือ success (สำเร็จ)
- 3xx : บ่งบอกว่า มีการ redirect เกิดขึ้น
- 4xx : บ่งบอกว่า มี error จากฝั่ง client (External Error)
- 5xx : บ่งบอกว่า มี error จากฝั่ง server (Internal Error)
และยังมี Status Codes อีกมากมายที่ยังไม่ได้กล่าวถึง สามารถอ่านเพิ่มเติมใน Status Codes (MDN Web Docs)
API Tips
การออกแบบ API โดยมาตรฐานทั่วไปนั้น
- Response ตัว Status Code ที่เหมาะสม เช่น สำเร็จก็ส่ง 200 หรือรีซอร์สใหม่ถูกสร้างก็ส่ง 201 กลับไปที่ client เป็นต้น
- Response และจัดการ Error (Error Handling) ได้อย่างเหมาะสมและสื่อความหมาย และระวังในเรื่องของข้อมูลที่ sensitive หรือเป็นความลับด้วยเช่นกันที่จะส่งกลับไปใน error messages
- มีการกำหนดเวอร์ชันของ API (API Versioning)
ก็จบลงไปแล้วสำหรับบทความ API คืออะไร หลักการทำงานและการใช้งาน API เป็นอย่างไรแค่ในเบื้องต้นเท่านั้น ก่อนที่จะลงลึกในบทความการสร้าง API บทความถัด ๆ ไป ซึ่งผมก็หวังว่าจะทำให้เพื่อน ๆ มองภาพรวมและมีความรู้ความเข้าใจเกี่ยวกับ API เพิ่มมากขึ้นนะครับ