บทนำ
เอกสารนี้มีไว้สำหรับนักพัฒนาซอฟต์แวร์ที่ต้องการเขียนแอปพลิเคชันที่โต้ตอบกับ YouTube โดยจะอธิบายแนวคิดพื้นฐานของ YouTube และ API นอกจากนี้ยังแสดงภาพรวมของฟังก์ชันต่างๆ ที่ API รองรับด้วย
ก่อนจะเริ่มต้น
-
คุณต้องมีบัญชี Google เพื่อเข้าถึงคอนโซล Google Cloud, ขอคีย์ API และลงทะเบียนแอปพลิเคชัน
-
สร้างโปรเจ็กต์ใน Google Developers Console และรับข้อมูลเข้าสู่ระบบการให้สิทธิ์เพื่อให้แอปพลิเคชันส่งคำขอ API ได้
-
หลังจากสร้างโปรเจ็กต์แล้ว ให้ตรวจสอบว่า YouTube Data API เป็นหนึ่งในบริการที่แอปพลิเคชันของคุณลงทะเบียนเพื่อใช้งาน
- ไปที่คอนโซล Cloud แล้วเลือกโปรเจ็กต์ที่เพิ่งลงทะเบียน
- ไปที่หน้า API ที่เปิดใช้ ตรวจสอบว่า YouTube Data API อยู่ในรายการ API ที่เปิดใช้ หากยังไม่ได้เปิดใช้ ให้เปิดไลบรารี API แล้วเปิดใช้ API
-
หากแอปพลิเคชันของคุณจะใช้วิธีการ API ที่ต้องใช้การอนุมัติของผู้ใช้ โปรดอ่านคู่มือการตรวจสอบ เพื่อเรียนรู้วิธีการนำการอนุมัติ OAuth 2.0 ไปใช้
-
เลือกไลบรารีของไคลเอ็นต์เพื่อลดความซับซ้อนในการติดตั้งใช้งาน API
-
ทำความคุ้นเคยกับแนวคิดหลักของรูปแบบข้อมูล JSON (ออบเจ็กต์ JavaScript Notation) JSON เป็นรูปแบบข้อมูลทั่วไปที่ไม่ขึ้นกับภาษา ซึ่งแสดงโครงสร้างข้อมูลที่กำหนดเองในรูปแบบข้อความอย่างง่าย สำหรับข้อมูลเพิ่มเติม โปรดดู json.org
แหล่งข้อมูลและประเภทแหล่งข้อมูล
ทรัพยากรคือเอนทิตีข้อมูลแต่ละรายการที่มีตัวระบุที่ไม่ซ้ำกัน ตารางด้านล่างอธิบายทรัพยากรประเภทต่างๆ ที่คุณโต้ตอบได้โดยใช้ API
| แหล่งข้อมูล | |
|---|---|
activity |
มีข้อมูลเกี่ยวกับการกระทำที่ผู้ใช้รายหนึ่งๆ ได้ทำในเว็บไซต์ YouTube การกระทำของผู้ใช้ที่รายงานในฟีดกิจกรรม ได้แก่ การให้คะแนนวิดีโอ การแชร์วิดีโอ การทำเครื่องหมายวิดีโอเป็นรายการโปรด และการโพสต์กระดานข่าวของช่อง เป็นต้น |
channel |
มีข้อมูลเกี่ยวกับช่อง YouTube ช่องเดียว |
channelBanner |
ระบุ URL ที่จะใช้เพื่อตั้งค่ารูปภาพที่อัปโหลดใหม่เป็นรูปภาพแบนเนอร์สำหรับช่อง |
channelSection |
มีข้อมูลเกี่ยวกับชุดวิดีโอที่ช่องเลือกให้แสดง ตัวอย่างเช่น ส่วนอาจแสดงวิดีโอที่อัปโหลดล่าสุด วิดีโอที่ได้รับความนิยมมากที่สุด หรือวิดีโอจากเพลย์ลิสต์ 1 รายการขึ้นไป |
guideCategory |
ระบุหมวดหมู่ที่ YouTube เชื่อมโยงกับช่องตามเนื้อหาหรือตัวบ่งชี้อื่นๆ เช่น ความนิยม หมวดหมู่ของไกด์จะพยายามจัดระเบียบช่องในลักษณะที่ช่วยให้ผู้ใช้ YouTube ค้นหาเนื้อหาที่ต้องการได้ง่ายขึ้น แม้ว่าช่องจะเชื่อมโยงกับหมวดหมู่ไกด์ได้มากกว่า 1 หมวดหมู่ แต่ก็ไม่รับประกันว่าช่องจะอยู่ในหมวดหมู่ไกด์ใดๆ |
i18nLanguage |
ระบุภาษาของแอปพลิเคชันที่เว็บไซต์ YouTube รองรับ ภาษาของแอปพลิเคชันอาจเรียกว่าภาษา UI ด้วย |
i18nRegion |
ระบุพื้นที่ทางภูมิศาสตร์ที่ผู้ใช้ YouTube เลือกเป็นภูมิภาคเนื้อหาที่ต้องการได้ ภูมิภาคของเนื้อหาอาจเรียกว่าภาษาของเนื้อหาด้วย |
playlist |
แสดงเพลย์ลิสต์ YouTube รายการเดียว เพลย์ลิสต์คือคอลเล็กชันวิดีโอที่ดูตามลำดับและแชร์กับผู้ใช้รายอื่นได้ |
playlistItem |
ระบุแหล่งข้อมูล เช่น วิดีโอที่เป็นส่วนหนึ่งของเพลย์ลิสต์ นอกจากนี้ แหล่งข้อมูล playlistItem ยังมีรายละเอียดที่อธิบายวิธีใช้แหล่งข้อมูลที่รวมไว้ในเพลย์ลิสต์ด้วย |
search result |
มีข้อมูลเกี่ยวกับวิดีโอ YouTube ช่อง หรือเพลย์ลิสต์ที่ตรงกับพารามิเตอร์การค้นหาที่ระบุในคำขอ API แม้ว่าผลการค้นหาจะชี้ไปยังแหล่งข้อมูลที่ระบุตัวตนได้อย่างแน่ชัด เช่น วิดีโอ แต่ผลการค้นหาไม่มีข้อมูลถาวรของตัวเอง |
subscription |
มีข้อมูลเกี่ยวกับการสมัครใช้บริการของผู้ใช้ YouTube การติดตามจะแจ้งเตือนผู้ใช้เมื่อมีการเพิ่มวิดีโอใหม่ลงในช่อง หรือเมื่อผู้ใช้รายอื่นดำเนินการอย่างใดอย่างหนึ่งในหลายๆ อย่างบน YouTube เช่น อัปโหลดวิดีโอ จัดอันดับวิดีโอ หรือแสดงความคิดเห็นในวิดีโอ |
thumbnail |
ระบุรูปภาพขนาดย่อที่เชื่อมโยงกับทรัพยากร |
video |
แสดงวิดีโอ YouTube รายการเดียว |
videoCategory |
ระบุหมวดหมู่ที่เชื่อมโยงหรืออาจเชื่อมโยงกับวิดีโอที่อัปโหลด |
watermark |
ระบุรูปภาพที่จะแสดงระหว่างการเล่นวิดีโอของช่องที่ระบุ เจ้าของช่องยังสามารถระบุช่องเป้าหมายที่ลิงก์กับรูปภาพ รวมถึงรายละเอียดเวลาที่กำหนดว่าลายน้ำจะปรากฏเมื่อใดในระหว่างการเล่นวิดีโอและระยะเวลาที่ลายน้ำจะปรากฏ |
โปรดทราบว่าในหลายกรณี ทรัพยากรจะมีข้อมูลอ้างอิงถึงทรัพยากรอื่นๆ เช่น พร็อพเพอร์ตี้ snippet.resourceId.videoId ของแหล่งข้อมูล playlistItem จะระบุแหล่งข้อมูลวิดีโอซึ่งมีข้อมูลที่สมบูรณ์เกี่ยวกับวิดีโอ อีกตัวอย่างหนึ่งคือ ผลการค้นหาที่มีพร็อพเพอร์ตี้ videoId, playlistId หรือ channelId ซึ่งระบุทรัพยากรวิดีโอ เพลย์ลิสต์ หรือช่องที่เฉพาะเจาะจง
การดำเนินการที่รองรับ
ตารางต่อไปนี้แสดงเมธอดที่พบบ่อยที่สุดที่ API รองรับ ทรัพยากรบางอย่างยังรองรับเมธอดอื่นๆ ที่ทำหน้าที่เฉพาะเจาะจงสำหรับทรัพยากรเหล่านั้นด้วย ตัวอย่างเช่น เมธอด videos.rate จะเชื่อมโยงการให้คะแนนของผู้ใช้กับวิดีโอ และเมธอด thumbnails.set จะอัปโหลดภาพปกวิดีโอไปยัง YouTube และเชื่อมโยงกับวิดีโอ
| การดำเนินการ | |
|---|---|
list |
ดึงข้อมูล (GET) รายการทรัพยากรอย่างน้อย 0 รายการ |
insert |
สร้าง (POST) ทรัพยากรใหม่ |
update |
แก้ไข (PUT) ทรัพยากรที่มีอยู่เพื่อให้สอดคล้องกับข้อมูลในคำขอ |
delete |
นำทรัพยากรที่เฉพาะเจาะจงออก (DELETE) |
ปัจจุบัน API รองรับเมธอดในการแสดงรายการทรัพยากรที่รองรับแต่ละประเภท และรองรับการดำเนินการเขียนสำหรับทรัพยากรจำนวนมากด้วย
ตารางด้านล่างจะระบุการดำเนินการที่รองรับสำหรับทรัพยากรประเภทต่างๆ การดำเนินการที่แทรก อัปเดต หรือลบทรัพยากรจะต้องมีการให้สิทธิ์ผู้ใช้เสมอ ในบางกรณี list เมธอดรองรับทั้งคำขอที่ได้รับอนุญาตและไม่ได้รับอนุญาต โดยคำขอที่ไม่ได้รับอนุญาตจะดึงข้อมูลสาธารณะเท่านั้น ส่วนคำขอที่ได้รับอนุญาตจะดึงข้อมูลเกี่ยวกับผู้ใช้ที่ได้รับการตรวจสอบสิทธิ์ในปัจจุบันหรือข้อมูลส่วนตัวของผู้ใช้ดังกล่าวได้ด้วย
| การดำเนินการที่รองรับ | ||||
|---|---|---|---|---|
| list | insert | update | delete | |
activity |
||||
caption |
||||
channel |
||||
channelBanner |
||||
channelSection |
||||
comment |
||||
commentThread |
||||
guideCategory |
||||
i18nLanguage |
||||
i18nRegion |
||||
playlist |
||||
playlistItem |
||||
search result |
||||
subscription |
||||
thumbnail |
||||
video |
||||
videoCategory |
||||
watermark |
||||
การใช้โควต้า
YouTube Data API ใช้โควต้าเพื่อให้มั่นใจว่านักพัฒนาแอปจะใช้บริการตามที่ตั้งใจไว้ และจะไม่สร้างแอปพลิเคชันที่ลดคุณภาพของบริการอย่างไม่เป็นธรรมหรือจำกัดการเข้าถึงสำหรับผู้อื่น คำขอ API ทั้งหมด รวมถึงคำขอที่ไม่ถูกต้อง จะมีค่าใช้จ่ายโควต้าอย่างน้อย 1 จุด คุณดูโควต้าที่แอปพลิเคชันของคุณใช้ได้ใน API Console
โปรเจ็กต์ที่เปิดใช้ YouTube Data API จะมีการจัดสรรโควต้าเริ่มต้นเป็น search.list การเรียกใช้ 100 ครั้ง, videos.insert การเรียกใช้ 100 ครั้ง และ 10,000 หน่วยต่อวันรวมกันสำหรับปลายทางอื่นๆ ทั้งหมด โควต้าเริ่มต้นซึ่งอาจมีการเปลี่ยนแปลงช่วยให้เราเพิ่มประสิทธิภาพการจัดสรรโควต้าและปรับขนาดโครงสร้างพื้นฐานในลักษณะที่มีความหมายต่อผู้ใช้ API มากขึ้น คุณดูการใช้งานโควต้าได้ในหน้าโควต้าในคอนโซล API
หมายเหตุ: หากถึงขีดจำกัดโควต้าแล้ว คุณสามารถขอโควต้าเพิ่มเติมได้โดยกรอกแบบฟอร์มคำขอขยายโควต้าสำหรับบริการ API ของ YouTube
การคำนวณการใช้โควต้า
Google จะคำนวณการใช้งานโควต้าโดยกำหนดต้นทุนให้กับคำขอแต่ละรายการ การดำเนินการประเภทต่างๆ มีค่าใช้จ่ายโควต้าที่แตกต่างกัน เช่น
- การดำเนินการอ่านที่ดึงข้อมูลรายการทรัพยากร เช่น ช่อง วิดีโอ เพลย์ลิสต์ มักจะใช้ 1 หน่วย
- การดำเนินการเขียนที่สร้าง อัปเดต หรือลบทรัพยากรจะมีค่าใช้จ่ายโดยปกติอยู่ที่
50หน่วย - คำค้นหาใช้
1หน่วย - การอัปโหลดวิดีโอมีค่าใช้จ่าย
1หน่วย
ตารางค่าใช้จ่ายโควต้าสำหรับคำขอ API แสดงค่าใช้จ่ายโควต้าของเมธอด API แต่ละรายการ เมื่อพิจารณากฎเหล่านี้ คุณจะประมาณจำนวนคำขอ ที่แอปพลิเคชันส่งได้ต่อวันโดยไม่เกินโควต้าได้
แหล่งข้อมูลบางส่วน
API อนุญาตและกำหนดให้ดึงข้อมูลทรัพยากรบางส่วน เพื่อให้แอปพลิเคชันหลีกเลี่ยงการโอน แยกวิเคราะห์ และจัดเก็บข้อมูลที่ไม่จำเป็น นอกจากนี้ วิธีนี้ยังช่วยให้มั่นใจได้ว่า API จะใช้ทรัพยากรเครือข่าย, CPU และหน่วยความจำได้อย่างมีประสิทธิภาพมากขึ้น
API รองรับพารามิเตอร์คำขอ 2 รายการ ซึ่งจะอธิบายไว้ในส่วนต่อไปนี้ ซึ่งช่วยให้คุณระบุพร็อพเพอร์ตี้ทรัพยากรที่ควรจะรวมอยู่ในการตอบกลับจาก API ได้
- พารามิเตอร์
partจะระบุกลุ่มพร็อพเพอร์ตี้ที่ควรแสดงผลสำหรับทรัพยากร - พารามิเตอร์
fieldsจะกรองการตอบกลับจาก API เพื่อแสดงเฉพาะพร็อพเพอร์ตี้ที่เฉพาะเจาะจงภายในส่วนของทรัพยากรที่ขอ
วิธีใช้พารามิเตอร์ part
พารามิเตอร์ part เป็นพารามิเตอร์ที่จำเป็นสำหรับคำขอ API ที่ดึงข้อมูลหรือแสดงผลทรัพยากร พารามิเตอร์จะระบุพร็อพเพอร์ตี้ทรัพยากรระดับบนสุด (ไม่ซ้อนกัน) อย่างน้อย 1 รายการที่ควรจะรวมอยู่ในการตอบกลับจาก API ตัวอย่างเช่น ทรัพยากร video มีส่วนต่างๆ ดังนี้
snippetcontentDetailsfileDetailsplayerprocessingDetailsrecordingDetailsstatisticsstatussuggestionstopicDetails
ส่วนต่างๆ เหล่านี้เป็นออบเจ็กต์ที่มีพร็อพเพอร์ตี้ที่ฝังอยู่ และคุณสามารถมองออบเจ็กต์เหล่านี้เป็นกลุ่มของช่องข้อมูลเมตาที่เซิร์ฟเวอร์ API อาจ (หรืออาจไม่) ดึงข้อมูล ดังนั้น พารามิเตอร์ part จึงกำหนดให้คุณเลือกคอมโพเนนต์ทรัพยากรที่แอปพลิเคชันของคุณใช้จริง ข้อกำหนดนี้มีวัตถุประสงค์หลัก 2 ประการ ได้แก่
- ซึ่งจะช่วยลดเวลาในการตอบสนองด้วยการป้องกันไม่ให้เซิร์ฟเวอร์ API เสียเวลาในการดึงข้อมูลฟิลด์ข้อมูลเมตาที่แอปพลิเคชันของคุณไม่ได้ใช้
- ซึ่งจะช่วยลดการใช้แบนด์วิดท์โดยการลด (หรือกำจัด) ปริมาณข้อมูลที่ไม่จำเป็นซึ่งแอปพลิเคชันอาจดึงข้อมูลมา
เมื่อเวลาผ่านไปและทรัพยากรเพิ่มชิ้นส่วนมากขึ้น ประโยชน์เหล่านี้ก็จะเพิ่มขึ้นเท่านั้น เนื่องจากแอปพลิเคชันของคุณจะไม่ขอพร็อพเพอร์ตี้ที่เพิ่งเปิดตัวซึ่งไม่รองรับ
วิธีใช้พารามิเตอร์ fields
พารามิเตอร์ fields จะกรองการตอบกลับจาก API ซึ่งมีเฉพาะส่วนของทรัพยากรที่ระบุในค่าพารามิเตอร์ part เพื่อให้การตอบกลับมีเฉพาะชุดฟิลด์ที่เฉพาะเจาะจง พารามิเตอร์ fields ช่วยให้คุณนำพร็อพเพอร์ตี้ที่ซ้อนกันออกจากการตอบกลับจาก API และลดการใช้แบนด์วิดท์ได้อีก (ใช้พารามิเตอร์ part เพื่อกรองพร็อพเพอร์ตี้ที่ซ้อนกันจากการตอบกลับไม่ได้)
กฎต่อไปนี้อธิบายไวยากรณ์ที่รองรับสำหรับค่าพารามิเตอร์ fields ซึ่งอิงตามไวยากรณ์ XPath อย่างคร่าวๆ
- ใช้รายการที่คั่นด้วยคอมมา (
fields=a,b) เพื่อเลือกหลายฟิลด์ - ใช้เครื่องหมายดอกจัน (
fields=*) เป็นไวลด์การ์ดเพื่อระบุช่องทั้งหมด - ใช้วงเล็บ (
fields=a(b,c)) เพื่อระบุกลุ่มพร็อพเพอร์ตี้ที่ซ้อนกันซึ่งจะรวมอยู่ในการตอบกลับจาก API - ใช้เครื่องหมายทับ (
fields=a/b) เพื่อระบุพร็อพเพอร์ตี้ที่ฝังอยู่
ในทางปฏิบัติ กฎเหล่านี้มักจะอนุญาตให้ใช้ค่าพารามิเตอร์ fields ที่แตกต่างกันหลายค่าเพื่อดึงข้อมูลการตอบกลับจาก API เดียวกัน ตัวอย่างเช่น หากต้องการดึงข้อมูลรหัส รายการในเพลย์ลิสต์ ชื่อ และตำแหน่งของทุกรายการในเพลย์ลิสต์ คุณสามารถใช้ค่าใดค่าหนึ่งต่อไปนี้
fields=items/id,playlistItems/snippet/title,playlistItems/snippet/positionfields=items(id,snippet/title,snippet/position)fields=items(id,snippet(title,position))
หมายเหตุ: ค่าพารามิเตอร์ fields ต้องเข้ารหัส URL เช่นเดียวกับค่าพารามิเตอร์การค้นหาทั้งหมด ตัวอย่างในเอกสารนี้จะไม่มีการเข้ารหัสเพื่อให้ง่ายต่อการอ่าน
ตัวอย่างคำขอแบบบางส่วน
ตัวอย่างด้านล่างแสดงวิธีใช้พารามิเตอร์ part และ fields เพื่อให้มั่นใจว่าการตอบกลับจาก API จะมีเฉพาะข้อมูลที่แอปพลิเคชันของคุณใช้เท่านั้น
- ตัวอย่างที่ 1 จะแสดงผลทรัพยากรวิดีโอที่มี 4 ส่วน รวมถึงพร็อพเพอร์ตี้
kindและetag - ตัวอย่างที่ 2 แสดงผลทรัพยากรวิดีโอที่มี 2 ส่วน รวมถึงพร็อพเพอร์ตี้
kindและetag - ตัวอย่างที่ 3 จะแสดงทรัพยากรวิดีโอที่มี 2 ส่วน แต่ไม่รวมพร็อพเพอร์ตี้
kindและetag - ตัวอย่างที่ 4 จะแสดงผลทรัพยากรวิดีโอที่มี 2 ส่วน แต่ไม่รวม
kindและetagรวมถึงพร็อพเพอร์ตี้ที่ซ้อนกันบางรายการในออบเจ็กต์snippetของทรัพยากร
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&part=snippet,contentDetails,statistics,status Description: This example retrieves avideoresource and identifies several resource parts that should be included in the API response. API response:{ "kind": "youtube#videoListResponse", "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/sDAlsG9NGKfr6v5AlPZKSEZdtqA\"", "videos": [ { "id": "7lCDEYXw3mM", "kind": "youtube#video", "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/iYynQR8AtacsFUwWmrVaw4Smb_Q\"", "snippet": { "publishedAt": "2012-06-20T22:45:24.000Z", "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", "title": "Google I/O 101: Q&A On Using Google APIs", "description": "Antonio Fuentes speaks to us and takes questions on working with Google APIs and OAuth 2.0.", "thumbnails": { "default": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/default.jpg" }, "medium": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/mqdefault.jpg" }, "high": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/hqdefault.jpg" } }, "categoryId": "28" }, "contentDetails": { "duration": "PT15M51S", "aspectRatio": "RATIO_16_9" }, "statistics": { "viewCount": "3057", "likeCount": "25", "dislikeCount": "0", "favoriteCount": "17", "commentCount": "12" }, "status": { "uploadStatus": "STATUS_PROCESSED", "privacyStatus": "PRIVACY_PUBLIC" } } ] }
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&part=snippet,statistics Description: This example modifies thepartparameter value so that thecontentDetailsandstatusproperties are not included in the response. API response:{ "kind": "youtube#videoListResponse", "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/sDAlsG9NGKfr6v5AlPZKSEZdtqA\"", "videos": [ { "id": "7lCDEYXw3mM", "kind": "youtube#video", "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/iYynQR8AtacsFUwWmrVaw4Smb_Q\"", "snippet": { "publishedAt": "2012-06-20T22:45:24.000Z", "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", "title": "Google I/O 101: Q&A On Using Google APIs", "description": "Antonio Fuentes speaks to us and takes questions on working with Google APIs and OAuth 2.0.", "thumbnails": { "default": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/default.jpg" }, "medium": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/mqdefault.jpg" }, "high": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/hqdefault.jpg" } }, "categoryId": "28" }, "statistics": { "viewCount": "3057", "likeCount": "25", "dislikeCount": "0", "favoriteCount": "17", "commentCount": "12" } } ] }
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&part=snippet,statistics&fields=items(id,snippet,statistics) Description: This example adds thefieldsparameter to remove allkindandetagproperties from the API response. API response:{ "videos": [ { "id": "7lCDEYXw3mM", "snippet": { "publishedAt": "2012-06-20T22:45:24.000Z", "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", "title": "Google I/O 101: Q&A On Using Google APIs", "description": "Antonio Fuentes speaks to us and takes questions on working with Google APIs and OAuth 2.0.", "thumbnails": { "default": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/default.jpg" }, "medium": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/mqdefault.jpg" }, "high": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/hqdefault.jpg" } }, "categoryId": "28" }, "statistics": { "viewCount": "3057", "likeCount": "25", "dislikeCount": "0", "favoriteCount": "17", "commentCount": "12" } } ] }
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&fields=items(id,snippet(channelId,title,categoryId),statistics)&part=snippet,statistics Description: This example modifies thefieldsparameter from example 3 so that in the API response, each video resource'ssnippetobject only includes thechannelId,title, andcategoryIdproperties. API response:{ "videos": [ { "id": "7lCDEYXw3mM", "snippet": { "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", "title": "Google I/O 101: Q&A On Using Google APIs", "categoryId": "28" }, "statistics": { "viewCount": "3057", "likeCount": "25", "dislikeCount": "0", "favoriteCount": "17", "commentCount": "12" } } ] }
การเพิ่มประสิทธิภาพ
การใช้ ETag
ETags ซึ่งเป็นส่วนมาตรฐานของโปรโตคอล HTTP ช่วยให้แอปพลิเคชันอ้างอิงทรัพยากร API ที่เฉพาะเจาะจงเวอร์ชันหนึ่งๆ ได้ โดยอาจเป็นทั้งฟีดหรือสินค้าในฟีดนั้นก็ได้ ฟังก์ชันการทำงานนี้รองรับกรณีการใช้งานต่อไปนี้
-
การแคชและการดึงข้อมูลแบบมีเงื่อนไข - แอปพลิเคชันของคุณสามารถแคชทรัพยากร API และ ETag ของทรัพยากรเหล่านั้นได้ จากนั้นเมื่อแอปพลิเคชันขอทรัพยากรที่จัดเก็บไว้อีกครั้ง แอปพลิเคชันจะระบุ ETag ที่เชื่อมโยงกับทรัพยากรนั้น หากทรัพยากรมีการเปลี่ยนแปลง API จะแสดงทรัพยากรที่แก้ไขและ ETag ที่เชื่อมโยงกับทรัพยากรเวอร์ชันนั้น หากทรัพยากรไม่มีการเปลี่ยนแปลง API จะแสดงการตอบกลับ HTTP 304 (
Not Modified) ซึ่งบ่งชี้ว่าทรัพยากรไม่มีการเปลี่ยนแปลง แอปพลิเคชันของคุณสามารถลดเวลาในการตอบสนองและการใช้แบนด์วิดท์ได้โดยการแสดงทรัพยากรที่แคชไว้ในลักษณะนี้ไลบรารีของไคลเอ็นต์สำหรับ Google APIs มีการรองรับ ETag ที่แตกต่างกัน ตัวอย่างเช่น ไลบรารีของไคลเอ็นต์ JavaScript รองรับ ETag ผ่านรายการที่อนุญาตสำหรับส่วนหัวของคำขอที่อนุญาตซึ่งรวมถึง
If-MatchและIf-None-Matchรายการที่อนุญาตจะอนุญาตให้มีการแคชเบราว์เซอร์ตามปกติ เพื่อให้สามารถแสดงทรัพยากรจากแคชของเบราว์เซอร์ได้หาก ETag ของทรัพยากรไม่มีการเปลี่ยนแปลง ในทางกลับกัน ไคลเอ็นต์ Obj-C ไม่รองรับ ETag -
การป้องกันการเขียนทับการเปลี่ยนแปลงโดยไม่ตั้งใจ - ETag ช่วยให้มั่นใจได้ว่าไคลเอ็นต์ API หลายรายการจะไม่เขียนทับการเปลี่ยนแปลงของกันและกันโดยไม่ตั้งใจ เมื่ออัปเดตหรือลบทรัพยากร แอปพลิเคชันจะระบุ ETag ของทรัพยากรได้ หาก ETag ไม่ตรงกับเวอร์ชันล่าสุดของทรัพยากรนั้น คำขอ API จะไม่สำเร็จ
การใช้ ETag ในแอปพลิเคชันมีประโยชน์หลายประการ ดังนี้
- การตอบกลับจาก API จะตอบสนองต่อคำขอทรัพยากรที่แคชไว้แต่ไม่มีการเปลี่ยนแปลงได้รวดเร็วยิ่งขึ้น ซึ่งจะช่วยลดเวลาในการตอบสนองและการใช้แบนด์วิดท์
- แอปพลิเคชันของคุณจะไม่เขียนทับการเปลี่ยนแปลงทรัพยากรที่ทำจากไคลเอ็นต์ API อื่นโดยไม่ตั้งใจ
Google APIs Client Library for JavaScript รองรับส่วนหัวของคำขอ HTTP If-Match และ If-None-Match จึงทำให้ ETag ทำงานได้ภายในบริบทของการแคชเบราว์เซอร์ปกติ
การใช้ gzip
นอกจากนี้ คุณยังลดแบนด์วิดท์ที่จำเป็นสำหรับการตอบกลับจาก API แต่ละรายการได้โดยเปิดใช้การบีบอัด Gzip แม้ว่าแอปพลิเคชันจะต้องใช้เวลา CPU เพิ่มเติมเพื่อคลายการบีบอัดการตอบกลับจาก API แต่ประโยชน์ของการใช้ทรัพยากรเครือข่ายน้อยลงมักจะคุ้มค่ากว่าต้นทุนดังกล่าว
หากต้องการรับการตอบกลับที่เข้ารหัส gzip คุณต้องทำ 2 อย่าง ได้แก่
- ตั้งค่าส่วนหัวของคำขอ HTTP
Accept-Encodingเป็นgzip - แก้ไข User Agent ให้มีสตริง
gzip
ตัวอย่างส่วนหัว HTTP ด้านล่างแสดงข้อกำหนดเหล่านี้สำหรับการเปิดใช้การบีบอัด gzip
Accept-Encoding: gzip User-Agent: my program (gzip)