ภาพรวม API ข้อมูลของ YouTube

บทนำ

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

ก่อนจะเริ่มต้น

  1. คุณต้องมีบัญชี Google เพื่อเข้าถึงคอนโซล Google API ขอคีย์ API และลงทะเบียนแอปพลิเคชัน

  2. สร้างโปรเจ็กต์ใน Google Developers Console และรับข้อมูลเข้าสู่ระบบการให้สิทธิ์เพื่อให้แอปพลิเคชันส่งคำขอ API ได้

  3. หลังจากสร้างโปรเจ็กต์แล้ว ให้ตรวจสอบว่า YouTube Data API เป็นหนึ่งในบริการที่แอปพลิเคชันของคุณลงทะเบียนเพื่อใช้งาน

    1. ไปที่คอนโซล API แล้วเลือกโปรเจ็กต์ที่คุณเพิ่งลงทะเบียน
    2. ไปที่หน้า API ที่เปิดใช้ ในรายการ API ให้ตรวจสอบว่าสถานะของ YouTube Data API v3 เป็นเปิด

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

  5. เลือกไลบรารีไคลเอ็นต์ที่จะใช้เพื่อช่วยให้การนำ API ไปใช้สะดวกยิ่งขึ้น

  6. ทำความคุ้นเคยกับแนวคิดหลักของรูปแบบข้อมูล 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 มีส่วนต่างๆ ดังนี้

  • 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. ตัวอย่างที่ 1 จะแสดงผลทรัพยากรวิดีโอที่มี 4 ส่วน รวมถึงพร็อพเพอร์ตี้ kind และ etag
  2. ตัวอย่างที่ 2 จะแสดงผลทรัพยากรวิดีโอที่มี 2 ส่วน รวมถึงพร็อพเพอร์ตี้ kind และ etag
  3. ตัวอย่างที่ 3 จะแสดงทรัพยากรวิดีโอที่มี 2 ส่วน แต่ไม่รวมพร็อพเพอร์ตี้ kind และ etag
  4. ตัวอย่างที่ 4 จะแสดงผลทรัพยากรวิดีโอที่มี 2 ส่วน แต่ไม่รวม kind และ etag รวมถึงพร็อพเพอร์ตี้ที่ซ้อนกันบางรายการในออบเจ็กต์ snippet ของทรัพยากร
ตัวอย่างที่ 1
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&part=snippet,contentDetails,statistics,status
Description: This example retrieves a video 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" } } ] }
ตัวอย่างที่ 2
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&part=snippet,statistics
Description: This example modifies the part parameter value so that the contentDetails and status 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" } } ] }
ตัวอย่างที่ 3
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 the fields parameter to remove all kind and etag 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" } } ] }
ตัวอย่างที่ 4
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 the fields parameter from example 3 so that in the API response, each video resource's snippet object only includes the channelId, title, and categoryId 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 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)