API คืออะไร? อธิบายอินเตอร์เฟสการเขียนโปรแกรมแอปพลิเคชัน

API ย่อมาจากอินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชันซึ่งเป็นแนวคิดที่ใช้ได้ทุกที่ตั้งแต่เครื่องมือบรรทัดคำสั่งไปจนถึงโค้ด Java ระดับองค์กรไปจนถึงแอปบนเว็บ Ruby on Rails API เป็นวิธีการโต้ตอบทางโปรแกรมกับส่วนประกอบซอฟต์แวร์หรือทรัพยากรที่แยกจากกัน

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

API คืออะไร?

API ถูกกำหนดให้เป็นข้อกำหนดของการโต้ตอบที่เป็นไปได้กับส่วนประกอบซอฟต์แวร์ นั่นหมายความว่าอย่างไรกันแน่? ลองนึกดูว่ารถยนต์เป็นส่วนประกอบของซอฟต์แวร์ API จะรวมข้อมูลเกี่ยวกับสิ่งที่ทำได้เช่นเร่งความเร็วเบรกเปิดวิทยุ ฯลฯ นอกจากนี้ยังรวมถึงข้อมูลเกี่ยวกับวิธีที่คุณจะทำให้มันทำสิ่งเหล่านั้นได้ ตัวอย่างเช่นในการเร่งความเร็วคุณต้องเหยียบคันเร่งแล้วดัน

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

สิ่งหนึ่งที่ควรทราบก็คือชื่อของ API บางตัวมักใช้เพื่ออ้างถึงทั้งข้อกำหนดของการโต้ตอบและส่วนประกอบซอฟต์แวร์จริงที่คุณโต้ตอบด้วย ตัวอย่างเช่นวลี "Twitter API" ไม่เพียง แต่หมายถึงชุดของกฎสำหรับการโต้ตอบทางโปรแกรมกับ Twitter แต่โดยทั่วไปเข้าใจว่าหมายถึงสิ่งที่คุณโต้ตอบด้วยเช่น "เรากำลังทำการวิเคราะห์ทวีตที่เราได้รับจาก Twitter API”

API เป็นเลเยอร์นามธรรม

เมื่อพูดถึงซอฟต์แวร์ API มีอยู่ทุกหนทุกแห่ง API จับมือกับหนึ่งในแนวคิดพื้นฐานที่สุดในวิทยาการคอมพิวเตอร์นั่นคือนามธรรม Abstraction เป็นเพียงวิธีการจัดระเบียบความซับซ้อนของระบบเพื่อให้สามารถจัดการการกระทำที่ซับซ้อนได้ด้วยวิธีง่ายๆ ลองนึกถึงสิ่งที่เป็นนามธรรมเช่น Amazon Dash Buttons แผงวงจรแบบปุ่มกดที่ใช้แบตเตอรี่ซึ่งคุณสามารถใช้สั่งเย็บเล่มจาก Amazon ได้ นี่คือสิ่งที่พวกเขาดูเหมือน:

คุณสั่งซื้อปุ่ม Dash จาก Amazon และใช้แอปบนสมาร์ทโฟนเพื่อเชื่อมโยงกับเครือข่าย Wi-Fi บัญชี Amazon ของคุณและผลิตภัณฑ์เช่นกระดาษเช็ดมือยี่ห้อโปรดของคุณ จากนั้นเมื่อใดก็ตามที่คุณต้องการสั่งซื้อกระดาษเช็ดมือเพิ่มเติมให้กดปุ่ม ปุ่ม Dash เชื่อมต่อกับอินเทอร์เน็ตและส่งข้อความเพื่อสั่งซื้อในบัญชีของคุณ ไม่กี่วันต่อมากระดาษเช็ดมือก็มาถึงหน้าประตูบ้านคุณ

เช่นเดียวกับ API ปุ่ม Dash เป็นอินเทอร์เฟซที่เรียบง่ายอย่างมีความสุขซึ่งซ่อนความซับซ้อนทุกประเภทไว้เบื้องหลัง ต้องดึง ID ของผลิตภัณฑ์ที่คุณสั่งซื้อจากฐานข้อมูลบางส่วน ที่อยู่จัดส่งของคุณจะต้องถูกดึงออกจากบัญชีของคุณ ต้องกำหนดศูนย์ปฏิบัติที่ใกล้ที่สุดที่จัดเก็บผ้าขนหนูกระดาษของคุณจากนั้นแจ้งให้นำสินค้าออกจากสต็อกที่มีอยู่และบรรจุหีบห่อ สุดท้ายแพ็กเกจจะต้องถูกส่งผ่านเครื่องบินรถบรรทุกและรถตู้ร่วมกับแพ็กเกจอื่น ๆ เพื่อให้แน่ใจว่าแพ็กเกจทั้งหมดจะไปถึงจุดหมายปลายทางได้อย่างมีประสิทธิภาพ

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

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

API สาธารณะและการรวม API

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

การผสมโค้ดประเภทนี้ช่วยให้ผู้ใช้สามารถผสมและจับคู่ฟังก์ชันการทำงานจากผู้ให้บริการต่างๆในระบบของตนเองได้ ตัวอย่างเช่นหากคุณใช้ซอฟต์แวร์การตลาดอัตโนมัติ Marketo คุณสามารถซิงค์ข้อมูลของคุณที่นั่นด้วยฟังก์ชัน Salesforce CRM

ไม่ควรตีความ“ เปิด” หรือ“ สาธารณะ” ว่ามีความหมายว่า“ ไม่เสียค่าใช้จ่าย” ในบริบทนี้ คุณยังคงต้องเป็นลูกค้า Marketo และ Salesforce จึงจะสามารถใช้งานได้ แต่ความพร้อมใช้งานของ API เหล่านี้ทำให้การผสานรวมเป็นกระบวนการที่ง่ายกว่าที่เป็นอยู่ ( มีรายการ API สาธารณะที่ดีที่คุณควรรู้)

บริการเว็บและ API

คุณอาจจำคำว่า w eb services ได้ตั้งแต่ต้นยุค 00 และคิดว่าแนวคิดของ API แบบเปิดนั้นฟังดูคล้ายกัน ในความเป็นจริงบริการเว็บเป็น API แบบเปิดที่เฉพาะเจาะจงซึ่งเป็นไปตามข้อกำหนดที่เข้มงวดพอสมควรรวมถึงที่ระบุไว้ใน Web Services Description Language (WSDL) ซึ่งเป็นตัวแปร XML

บริการเว็บถูกกำหนดให้ใช้เป็นส่วนหนึ่งของสถาปัตยกรรมที่มุ่งเน้นบริการ (SOA) ตามที่บล็อกของ Nordic APIs อธิบายไว้นั่นทำให้บริการเว็บมีชื่อเสียเนื่องจาก SOAs ไม่เคยใช้งานได้เต็มศักยภาพ ความก้าวหน้าในเทคนิคที่ใช้สำหรับการสื่อสารระหว่างบริการกับบริการโดยเฉพาะอย่างยิ่ง REST ที่เบากว่าและยืดหยุ่นกว่าได้ทำให้บริการเว็บค่อนข้างล้าหลังในโลกของ API สาธารณะ

REST API

เดิมทีบริการเว็บถูกออกแบบมาเพื่อสื่อสารโดยใช้ SOAP (Simple Object Access Protocol) ซึ่งเป็นโปรโตคอลการส่งข้อความที่ส่งเอกสาร XML ผ่าน HTTP อย่างไรก็ตามปัจจุบัน API บนเว็บส่วนใหญ่ใช้ REST - Representational State Transfer - เป็นรูปแบบสถาปัตยกรรม

REST ได้รับการแนะนำอย่างเป็นทางการโดย Roy Fielding ในวิทยานิพนธ์ระดับปริญญาเอกของเขาในปี 2000 ซึ่งเป็นชุดของส่วนประกอบทางสถาปัตยกรรมหลักการออกแบบและปฏิสัมพันธ์ที่ใช้สำหรับการสร้างระบบแบบกระจายที่เกี่ยวข้องกับสื่อทุกประเภท (ข้อความวิดีโอ ฯลฯ ) REST เป็นรูปแบบของระบบการสร้างที่ช่วยให้สามารถสื่อสารและแสดงข้อมูลผ่านเว็บได้อย่างยืดหยุ่นในขณะที่จัดเตรียมโครงสร้างที่จำเป็นในการสร้างส่วนประกอบที่ใช้งานทั่วไปได้อย่างง่ายดาย

ใน REST API ทรัพยากรอาจเป็นอะไรก็ได้ แต่ตัวอย่าง ได้แก่ ผู้ใช้รายการทวีตและผลลัพธ์ปัจจุบันของการค้นหาทวีต ทรัพยากรเหล่านี้แต่ละรายการสามารถระบุแอดเดรสได้ที่ตัวระบุทรัพยากรซึ่งในกรณีของ REST API บนเว็บมักจะเป็น URL เช่น //api.twitter.com/1.1/users/show?screen_name=twitterdev เมื่อโปรแกรมประยุกต์ร้องขอทรัพยากรโดยใช้ตัวระบุ, API มอบปัจจุบันเป็นตัวแทนของทรัพยากรไปยังโปรแกรมประยุกต์ที่ว่าในรูปแบบที่แอพลิเคชันสามารถใช้เช่นภาพ JPEG หน้า HTML หรือ JSON

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

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

ตัวอย่าง API

มี API สาธารณะมากมายให้คุณโต้ตอบหลายรายการจากกลุ่มอุตสาหกรรม ความสามารถในการเข้าถึงโค้ดของ บริษัท แพลตฟอร์มบางแห่งโดยทางโปรแกรมผ่านทาง API คือสิ่งที่ทำให้พวกเขาเป็นแพลตฟอร์มโดยพื้นฐานแล้ว ตัวอย่าง API ที่โดดเด่น ได้แก่ :

  • Google APIซึ่งช่วยให้คุณสามารถเชื่อมต่อโค้ดของคุณกับบริการต่างๆของ Google ตั้งแต่แผนที่ไปจนถึงแปลภาษา API มีความสำคัญต่อ Google มากจนได้รับ Apigee ซึ่งเป็นแพลตฟอร์มการจัดการ API ชั้นนำ
  • Facebook APIซึ่งช่วยให้คุณเข้าถึงกราฟโซเชียลและเครื่องมือทางการตลาดของ Facebook โดยใช้โปรแกรม (บริษัท ได้ จำกัด เฉพาะข้อมูลผู้ใช้ที่คุณสามารถเข้าถึงได้ผ่าน API เหล่านี้ในผลกระทบจาก Cambridge Analytica และเรื่องอื้อฉาวอื่น ๆ )

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

Java API

Java API คือไลบรารีของส่วนประกอบซอฟต์แวร์ที่ "พร้อมใช้งาน" สำหรับทุกคนที่ติดตั้ง Java Development Kit ส่วนประกอบเหล่านี้ใช้งานทั่วไปและโดยทั่วไปจะเพิ่มผลผลิตเนื่องจากโปรแกรมเมอร์ไม่จำเป็นต้องเริ่มต้นใหม่ทุกครั้ง องค์ประกอบพื้นฐานอย่างหนึ่งที่ใช้ในซอฟต์แวร์คือสิ่งที่เรียกว่ารายการซึ่งตามที่คุณคาดหวังจะติดตามรายการต่างๆ Java API กำหนดสิ่งที่คุณสามารถทำได้กับรายการ: เพิ่มรายการเรียงลำดับรายการกำหนดว่ามีรายการอยู่ในรายการหรือไม่และยังระบุวิธีดำเนินการเหล่านั้น ในการจัดเรียงรายการคุณต้องระบุวิธีที่คุณต้องการให้รายการเรียงลำดับ: เรียงตามตัวอักษรตัวเลขจากมากไปหาน้อยสีที่สว่างที่สุดถึงทึบที่สุดเป็นต้น

Twitter API

Twitter API เป็น JSON API บนเว็บที่ช่วยให้นักพัฒนาสามารถโต้ตอบกับข้อมูล Twitter โดยใช้โปรแกรม ต่างจาก Java API ซึ่งรวมอยู่ใน Java Development Kit ตรงที่ Twitter API เป็น API บนเว็บ ต้องเข้าถึงได้โดยการร้องขอทางอินเทอร์เน็ตไปยังบริการที่ Twitter โฮสต์

ด้วย API บนเว็บเช่น Twitter แอปพลิเคชันของคุณจะส่งคำขอ HTTP เช่นเดียวกับเว็บเบราว์เซอร์ แต่แทนที่จะส่งคำตอบเป็นหน้าเว็บเพื่อความเข้าใจของมนุษย์กลับส่งคืนในรูปแบบที่แอปพลิเคชันสามารถแยกวิเคราะห์ได้ง่าย มีรูปแบบต่างๆเพื่อจุดประสงค์นี้และ Twitter ใช้รูปแบบที่เป็นที่นิยมและใช้งานง่ายที่เรียกว่า JSON (หากคุณไม่คุ้นเคยกับ JSON คุณอาจต้องการใช้เวลาสักสองสามนาทีในการอ่านที่นี่)

องค์ประกอบพื้นฐานอย่างหนึ่งใน Twitter คือทวีต Twitter API บอกคุณว่าคุณสามารถทำอะไรกับทวีตได้: ค้นหาทวีตสร้างทวีตทวีตที่ชื่นชอบ นอกจากนี้ยังบอกวิธีดำเนินการเหล่านี้ ในการค้นหาทวีตคุณต้องระบุเกณฑ์การค้นหาของคุณ: คำหรือแฮชแท็กที่ต้องการค้นหาตำแหน่งทางภูมิศาสตร์ภาษา ฯลฯ

การออกแบบ API

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

พฤติกรรมที่สอดคล้องกันภายใน API ส่งผลอย่างมากต่อความเร็วในการเรียนรู้และโอกาสที่โปรแกรมเมอร์จะทำผิดพลาดเมื่อใช้งาน โดยทั่วไป API ที่ดำเนินการคล้ายกันควรทำงานในลักษณะเดียวกันโดยไม่คำนึงถึงความแตกต่างทางเทคนิค สำหรับตัวอย่างของ API ที่ไม่สอดคล้องกันลองดูสองวิธีในการเพิ่มรายการในรายการใน Java:

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

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