บทนำ
เอกสารนี้มีไว้สำหรับนักพัฒนาแอปที่ต้องการเขียนแอปพลิเคชันที่โต้ตอบกับ YouTube โดยจะอธิบายแนวคิดพื้นฐานของ YouTube และ API เอง นอกจากนี้ ยังแสดงภาพรวมของฟังก์ชันต่างๆ ที่ API รองรับด้วย
ก่อนจะเริ่มต้น
-
คุณต้องมีบัญชี Google เพื่อเข้าถึงคอนโซล Google API ขอคีย์ API และลงทะเบียนแอปพลิเคชัน
-
สร้างโปรเจ็กต์ใน Google Developers Console และรับข้อมูลเข้าสู่ระบบการให้สิทธิ์เพื่อให้แอปพลิเคชันส่งคำขอ API ได้
-
หลังจากสร้างโปรเจ็กต์แล้ว ให้ตรวจสอบว่า YouTube Data API เป็นหนึ่งในบริการที่แอปพลิเคชันของคุณลงทะเบียนเพื่อใช้งาน
- ไปที่คอนโซล API แล้วเลือกโปรเจ็กต์ที่คุณเพิ่งลงทะเบียน
- ไปที่หน้า API ที่เปิดใช้ ในรายการ API ให้ตรวจสอบว่าสถานะของ YouTube Data API v3 เป็นเปิด
-
หากแอปพลิเคชันของคุณจะใช้วิธีการ API ที่ต้องใช้การอนุมัติของผู้ใช้ โปรดอ่านคู่มือการตรวจสอบ เพื่อเรียนรู้วิธีการนำการอนุมัติ OAuth 2.0 ไปใช้
-
เลือกไลบรารีไคลเอ็นต์ที่จะใช้เพื่อช่วยให้การนำ API ไปใช้สะดวกยิ่งขึ้น
-
ทำความคุ้นเคยกับแนวคิดหลักของรูปแบบข้อมูล JSON (JavaScript Object 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 จะมีการจัดสรรโควต้าเริ่มต้นที่ 10,000 หน่วยต่อวัน ซึ่งเป็นจำนวนที่เพียงพอสำหรับผู้ใช้ API ส่วนใหญ่ของเรา โควต้าเริ่มต้นซึ่งอาจมีการเปลี่ยนแปลงจะช่วยให้เราเพิ่มประสิทธิภาพการจัดสรรโควต้าและปรับขนาดโครงสร้างพื้นฐานในลักษณะที่มีความหมายต่อผู้ใช้ API มากขึ้น คุณดูการใช้โควต้าได้ในหน้าโควต้าในคอนโซล API
หมายเหตุ: หากใช้โควต้าจนถึงขีดจำกัด คุณสามารถขอโควต้าเพิ่มเติมได้โดย กรอกแบบฟอร์มคำขอ ขยายโควต้าสำหรับบริการ API ของ YouTube
การคำนวณการใช้งานโควต้า
Google จะคำนวณการใช้งานโควต้าโดยกำหนดต้นทุนให้กับคำขอแต่ละรายการ การดำเนินการประเภทต่างๆ มีค่าใช้จ่ายโควต้าที่แตกต่างกัน เช่น
- การดำเนินการอ่านที่ดึงรายการทรัพยากร เช่น ช่อง วิดีโอ เพลย์ลิสต์ มักจะมีค่าใช้จ่าย 1 หน่วย
- การดำเนินการเขียนที่สร้าง อัปเดต หรือลบทรัพยากรจะมีค่าใช้จ่ายโดยปกติอยู่ที่
50หน่วย - คำขอค้นหามีค่าใช้จ่าย
100หน่วย - การอัปโหลดวิดีโอมีค่าใช้จ่าย
100หน่วย
ตารางค่าใช้จ่ายโควต้าสำหรับคำขอ 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)