บทนำ
เอกสารนี้มีไว้สำหรับนักพัฒนาซอฟต์แวร์ที่ต้องการเขียนแอปพลิเคชันที่โต้ตอบกับ 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 ) |
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
หน่วย - การอัปโหลดวิดีโอ 1 รายการมีค่าใช้จ่าย
1600
หน่วย
ตารางต้นทุนโควต้าสำหรับคำขอ API จะแสดง ต้นทุนโควต้าของเมธอด API แต่ละวิธี โดยคำนึงถึงกฎเหล่านี้ คุณสามารถประมาณจำนวนคำขอ ที่แอปพลิเคชันของคุณสามารถส่งได้ต่อวันโดยไม่เกินโควต้า
แหล่งข้อมูลบางส่วน
API อนุญาตและจำเป็นต้องมีการดึงข้อมูลทรัพยากรบางส่วนเพื่อให้แอปพลิเคชันหลีกเลี่ยงการโอน แยกวิเคราะห์ และจัดเก็บข้อมูลที่ไม่จำเป็นได้ วิธีนี้ยังช่วยให้ API ใช้ทรัพยากรเครือข่าย, CPU และหน่วยความจำได้อย่างมีประสิทธิภาพมากขึ้น
API รองรับพารามิเตอร์คำขอ 2 รายการ ซึ่งอธิบายไว้ในส่วนต่อไปนี้ ซึ่งจะช่วยให้คุณระบุพร็อพเพอร์ตี้ของทรัพยากรที่ควรรวมไว้ในการตอบกลับ API ได้
- พารามิเตอร์
part
ระบุกลุ่มพร็อพเพอร์ตี้ที่ควรแสดงผลสำหรับทรัพยากร - พารามิเตอร์
fields
จะกรองการตอบกลับของ API เพื่อแสดงพร็อพเพอร์ตี้บางรายการภายในส่วนทรัพยากรที่ขอเท่านั้น
วิธีใช้พารามิเตอร์ part
พารามิเตอร์ part
เป็นพารามิเตอร์ที่จำเป็นสำหรับคำขอ API ที่ดึงหรือส่งคืนทรัพยากร พารามิเตอร์จะระบุพร็อพเพอร์ตี้ทรัพยากรระดับบนสุด (ไม่ได้ซ้อน) อย่างน้อย 1 รายการที่ควรรวมไว้ในการตอบกลับของ API ตัวอย่างเช่น ทรัพยากร video
จะมีส่วนต่อไปนี้
snippet
contentDetails
fileDetails
player
processingDetails
recordingDetails
statistics
status
suggestions
topicDetails
ส่วนต่างๆ ทั้งหมดนี้คือออบเจ็กต์ที่มีพร็อพเพอร์ตี้ที่ซ้อนกันอยู่ ซึ่งคุณอาจคิดว่าออบเจ็กต์เหล่านี้เป็นกลุ่มของช่องข้อมูลเมตาที่เซิร์ฟเวอร์ 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/position
fields=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 avideo
resource 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 thepart
parameter value so that thecontentDetails
andstatus
properties 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 thefields
parameter to remove allkind
andetag
properties 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 thefields
parameter from example 3 so that in the API response, each video resource'ssnippet
object only includes thechannelId
,title
, andcategoryId
properties. 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 API จะมีการรองรับ 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)