ภาพรวม 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)