Referensi Protokol Google Data API

Dokumen ini menjelaskan protokol yang digunakan oleh Google Data API, termasuk informasi tentang tampilan kueri, seperti apa hasilnya, dan sebagainya.

Untuk informasi selengkapnya tentang Google Data API, lihat dokumen Panduan Developer Data Google dan Panduan Protokol.

Audiens

Dokumen ini ditujukan bagi siapa saja yang ingin memahami detail format XML dan protokol yang digunakan oleh Google Data API.

Jika Anda hanya ingin menulis kode yang menggunakan API klien Data Google, Anda tidak perlu mengetahui detail tersebut; sebagai gantinya, Anda dapat menggunakan library klien khusus bahasa.

Namun, jika Anda ingin memahami protokolnya, baca dokumen ini. Misalnya, Anda mungkin ingin membaca dokumen ini untuk membantu melakukan salah satu tugas berikut:

  • mengevaluasi arsitektur Data Google
  • coding menggunakan protokol tanpa menggunakan library klien Data Google yang disediakan
  • menulis library klien dalam bahasa baru

Dokumen ini mengasumsikan bahwa Anda memahami dasar-dasar XML, namespace, feed yang dipublikasikan, serta permintaan GET, POST, PUT, dan DELETE di HTTP, serta konsep HTTP tentang "resource". Untuk informasi selengkapnya tentang hal-hal tersebut, lihat bagian Referensi tambahan dalam dokumen ini.

Dokumen ini tidak bergantung pada bahasa pemrograman tertentu. Anda dapat mengirim dan menerima pesan Data Google menggunakan bahasa pemrograman apa pun yang memungkinkan Anda mengeluarkan permintaan HTTP dan mengurai respons berbasis XML.

Detail protokol

Bagian ini menjelaskan format dokumen dan sintaksis kueri Data Google.

Format dokumen

Google Data, Atom, dan RSS 2.0 menggunakan model data dasar yang sama: penampung yang menyimpan beberapa data global dan jumlah entri. Untuk setiap protokol, format ditentukan oleh skema dasar, tetapi dapat diperluas menggunakan namespace asing.

Google Data API dapat menggunakan format sindikasi Atom (untuk operasi baca dan tulis) atau format RSS (hanya untuk dibaca).

Atom adalah format default Google Data. Untuk meminta respons dalam format RSS, gunakan parameter /alt=rss/; untuk informasi lebih lanjut, lihat Permintaan kueri.

Saat Anda meminta data dalam format RSS, Data Google akan menyediakan feed (atau representasi resource lainnya) dalam format RSS. Jika tidak ada properti RSS yang setara untuk properti Data Google tertentu, Google Data akan menggunakan properti Atom, melabelinya dengan namespace yang sesuai untuk menunjukkan bahwa properti tersebut merupakan ekstensi untuk RSS.

Catatan: Sebagian besar feed Data Google dalam format Atom menggunakan namespace Atom sebagai namespace default dengan menentukan atribut xmlns pada elemen feed; lihat bagian contoh tentang cara melakukannya. Dengan demikian, contoh dalam dokumen ini tidak secara eksplisit menentukan atom: untuk elemen dalam feed format Atom.

Tabel berikut menampilkan representasi Atom dan RSS dari elemen skema. Semua data yang tidak disebutkan dalam tabel ini diperlakukan sebagai XML biasa dan muncul sama di kedua representasi. Kecuali dinyatakan lain, elemen XML dalam kolom tertentu berada di namespace yang sesuai dengan kolom tersebut. Ringkasan ini menggunakan notasi XPath standar: khususnya, garis miring menampilkan hierarki elemen, dan tanda @ menunjukkan atribut elemen.

Di setiap tabel berikut, item yang disoroti diperlukan.

Tabel berikut menunjukkan elemen feed Data Google:

Item Skema Feed Representasi Atom Representasi RSS
Judul Feed /feed/title /rss/channel/title
ID Feed /feed/id /rss/channel/atom:id
Link HTML Feed /feed/link[@rel="alternate"]\
[@type="text/html"]/@href
/rss/channel/link
Deskripsi Feed /feed/subtitle /rss/channel/description
Bahasa Feed /feed/@xml:lang /rss/channel/language
Hak Cipta Feed /feed/rights /rss/channel/copyright
Pengarang Feed

/feed/author/name
/feed/author/email

(Diperlukan dalam kasus tertentu; lihat spesifikasi Atom.)

/rss/channel/managingEditor
Tanggal Pembaruan Terakhir Feed /feed/updated
(Format RFC 3339)
/rss/channel/lastBuildDate
(Format RFC 822)
Kategori Feed /feed/category/@term /rss/channel/category
Skema Kategori Feed /feed/category/@scheme /rss/channel/category/@domain
Pembuat Feed /feed/generator
/feed/generator/@uri
/rss/channel/generator
Ikon Feed /feed/icon /rss/channel/image/url (kecuali jika ada juga logo, dalam kasus ini ikon tidak disertakan dalam feed)
Logo Feed /feed/logo /rss/channel/image/url

Tabel berikut menunjukkan elemen feed hasil penelusuran Data Google. Perlu diketahui bahwa Data Google mengekspos beberapa elemen Respons OpenSearch 1.1 di feed hasil penelusurannya.

Item Skema Feed Hasil Penelusuran Representasi Atom Representasi RSS/OpenSearch
Jumlah Hasil Penelusuran /feed/openSearch:totalResults /rss/channel/openSearch:totalResults
Indeks Awal Hasil Penelusuran /feed/openSearch:startIndex /rss/channel/openSearch:startIndex
Jumlah Hasil Penelusuran Per Halaman /feed/openSearch:itemsPerPage /rss/channel/openSearch:itemsPerPage

Tabel berikut menunjukkan elemen entri Data Google:

Entri Skema Entri Representasi Atom Representasi RSS
ID entri /feed/entry/id /rss/channel/item/guid
ID Versi Entri Secara opsional, sematkan di EditURI (lihat bagian Serentak optimis di dokumen ini).
Judul Entri /feed/entry/title /rss/channel/item/title
Link Entri /feed/entry/link /rss/channel/item/link
/rss/channel/item/enclosure
/rss/channel/item/comments
Ringkasan Entri

/feed/entry/summary

(Diperlukan dalam kasus tertentu; lihat spesifikasi Atom.)

/rss/channel/item/atom:summary
Konten Entri

/feed/entry/content

(Jika tidak ada elemen konten, entri harus berisi setidaknya satu elemen <link rel="alternate">.)

/rss/channel/item/description
Penulis Entri

/feed/entry/author/name
/feed/entry/author/email

(Diperlukan dalam kasus tertentu; lihat spesifikasi Atom.)

/rss/channel/item/author
Kategori Entri /feed/entry/category/@term /rss/channel/item/category
Skema Kategori Entri /feed/entry/category/@scheme /rss/channel/item/category/@domain
Tanggal Publikasi Entri /feed/entry/published
(RFC 3339)
/rss/channel/item/pubDate
(RFC 822)
Tanggal Pembaruan Entri /feed/entry/updated
(RFC 3339)
/rss/channel/item/atom:updated
(RFC 3339)

Kueri

Bagian ini menjelaskan cara menggunakan sistem kueri.

Prinsip desain model kueri

Model kueri sengaja dibuat sangat sederhana. Prinsip dasarnya adalah:

  • Kueri dinyatakan sebagai URI HTTP, bukan sebagai header HTTP atau sebagai bagian dari payload. Salah satu manfaat pendekatan ini adalah Anda dapat menautkan ke kueri.
  • Predikat tercakup dalam satu item. Oleh karena itu, tidak ada cara untuk mengirimkan kueri korelasi seperti "temukan semua email dari orang-orang yang mengirimi saya setidaknya 10 email hari ini".
  • Kumpulan properti yang dapat predikat kueri sangat terbatas; sebagian besar kueri hanyalah kueri penelusuran teks lengkap.
  • Pengurutan hasil bergantung pada implementasi.
  • Protokol tersebut dapat diperluas secara alami. Jika ingin mengekspos predikat atau pengurutan tambahan dalam layanan, Anda dapat melakukannya dengan mudah melalui pengantar parameter baru.

Permintaan kueri

Klien mengkueri layanan Data Google dengan mengeluarkan permintaan GET HTTP. URI kueri terdiri dari URI resource (disebut FeedURI di Atom) yang diikuti dengan parameter kueri. Sebagian besar parameter kueri direpresentasikan sebagai parameter URL ?name=value[&...] tradisional. Parameter kategori ditangani secara berbeda; lihat di bawah ini.

Misalnya, jika FeedURI adalah http://www.example.com/feeds/jo, Anda mungkin mengirim kueri dengan URI berikut:

http://www.example.com/feeds/jo?q=Darcy&updated-min=2005-04-19T15:30:00Z

Layanan Data Google mendukung GET Kondisional HTTP. Keduanya menetapkan header respons Last-Modified berdasarkan nilai elemen <atom:updated> dalam feed atau entri yang ditampilkan. Klien dapat mengirimkan kembali nilai ini sebagai nilai header permintaan If-Modified-Since untuk menghindari pengambilan konten lagi jika belum berubah. Jika konten tidak berubah sejak waktu If-Modified-Since, layanan Data Google akan menampilkan respons HTTP 304 (Not Modified).

Layanan Data Google harus mendukung kueri kategori dan kueri alt; dukungan untuk parameter lainnya bersifat opsional. Meneruskan parameter standar yang tidak dipahami oleh layanan tertentu akan menghasilkan respons 403 Forbidden. Meneruskan parameter non-standar yang tidak didukung akan menghasilkan respons 400 Bad Request. Untuk mengetahui informasi tentang kode status lainnya, lihat bagian Kode status HTTP pada dokumen ini.

Parameter kueri standar diringkas dalam tabel berikut. Semua nilai parameter harus dienkode URL.

Parameter Arti Catatan
q String kueri teks lengkap
  • Saat membuat kueri, buat daftar istilah penelusuran yang dipisahkan dengan spasi, dalam bentuk q=term1 term2 term3. (Seperti semua nilai parameter kueri, spasi harus dienkode URL.) Layanan Data Google menampilkan semua entri yang cocok dengan semua istilah penelusuran (seperti menggunakan AND di antara istilah). Seperti penelusuran web Google, layanan Data Google menelusuri kata lengkap (dan kata terkait dengan kata dasar yang sama), bukan substring.
  • Untuk menelusuri frasa yang tepat, apit frasa tersebut dengan tanda kutip: q="exact phrase".
  • Untuk mengecualikan entri yang cocok dengan istilah tertentu, gunakan formulir q=-term.
  • Penelusuran tidak peka huruf besar/kecil.
  • Contoh: untuk menelusuri semua entri yang berisi frasa yang persis "Elizabeth Bennet" dan kata "Darcy", tetapi tidak berisi kata "Austen", gunakan kueri berikut: ?q="Elizabeth Bennet" Darcy -Austen
/-/category Filter kategori
  • Cantumkan setiap kategori seolah-olah merupakan bagian dari URI resource, dalam bentuk /categoryname/—ini adalah pengecualian untuk formulir name=value biasa.
  • Cantumkan semua kategori sebelum parameter kueri lainnya.
  • Awali kategori pertama dengan /-/ untuk memperjelas bahwa kategori tersebut adalah kategori. Misalnya, jika feed Jo memiliki kategori untuk entri tentang Fritz, Anda dapat meminta entri tersebut seperti ini: http://www.example.com/feeds/jo/-/Fritz. Hal ini memungkinkan implementasi untuk membedakan URI kueri predikat kategori dengan URI resource.
  • Anda dapat membuat kueri di beberapa kategori dengan mencantumkan beberapa parameter kategori, yang dipisahkan dengan garis miring. Layanan Data Google menampilkan semua entri yang cocok dengan semua kategori (seperti menggunakan AND antaristilah). Misalnya: http://www.example.com/feeds/jo/-/Fritz/Laurie menampilkan entri yang cocok dengan kedua kategori tersebut.
  • Untuk melakukan OR di antara istilah, gunakan karakter pipa (|), yang dienkode ke URL sebagai %7C. Misalnya: http://www.example.com/feeds/jo/-/Fritz%7CLaurie menampilkan entri yang cocok dengan salah satu kategori.
  • Entri cocok dengan kategori yang ditentukan jika entri berada dalam kategori yang memiliki istilah atau label yang cocok, seperti yang ditentukan dalam spesifikasi Atom. (Secara kasar, "term" adalah string internal yang digunakan oleh software untuk mengidentifikasi kategori, sedangkan "label" adalah string yang dapat dibaca manusia yang ditampilkan kepada pengguna di antarmuka pengguna.)
  • Untuk mengecualikan entri yang cocok dengan kategori tertentu, gunakan formulir /-categoryname/.
  • Untuk membuat kueri kategori yang memiliki skema—seperti <category scheme="urn:google.com" term="public"/>—Anda harus menempatkan skema dalam tanda kurung kurawal sebelum nama kategori. Misalnya: /{urn:google.com}public. Jika skema berisi karakter garis miring (/), skema harus dienkode ke URL sebagai %2F. Untuk mencocokkan kategori yang tidak memiliki skema, gunakan sepasang tanda kurung kurawal kosong. Jika Anda tidak menentukan tanda kurung kurawal, kategori dalam skema apa pun akan cocok.
  • Fitur di atas dapat digabungkan. Misalnya: /A%7C-{urn:google.com}B/-C berarti (A OR (NOT B)) AND (NOT C).
category Filter kategori
  • Cara alternatif untuk melakukan filter kategori. Kedua metode tersebut setara.
  • Untuk melakukan OR antar-istilah, gunakan karakter pipa (|), dienkode URL sebagai %7C. Misalnya: http://www.example.com/feeds?category=Fritz%7CLaurie menampilkan entri yang cocok dengan salah satu kategori.
  • Untuk melakukan AND antar-istilah, gunakan karakter koma (,). Misalnya: http://www.example.com/feeds?category=Fritz,Laurie menampilkan entri yang cocok dengan kedua kategori.
author Penulis entri
  • Layanan akan menampilkan entri yang nama penulis dan/atau alamat emailnya cocok dengan string kueri Anda.
alt Jenis representasi alternatif
  • Jika Anda tidak menentukan parameter alt, layanan akan menampilkan feed Atom. Fungsi ini setara dengan alt=atom.
  • alt=rss menampilkan feed hasil RSS 2.0.
  • alt=json menampilkan representasi JSON dari feed. Informasi selengkapnya
  • alt=json-in-script Meminta respons yang menggabungkan JSON dalam tag skrip. Informasi selengkapnya
updated-min, updated-max Batas pada tanggal pembaruan entri
  • Gunakan format stempel waktu RFC 3339. Contoh: 2005-08-09T10:57:00-08:00.
  • Batas bawah bersifat inklusif, sedangkan batas atasnya bersifat eksklusif.
published-min, published-max Batas pada tanggal publikasi entri
  • Gunakan format stempel waktu RFC 3339. Contoh: 2005-08-09T10:57:00-08:00.
  • Batas bawah bersifat inklusif, sedangkan batas atasnya bersifat eksklusif.
start-index Indeks berbasis 1 dari hasil pertama yang akan diambil
  • Perhatikan bahwa ini bukan mekanisme kursor umum. Jika pertama-tama Anda mengirim kueri dengan ?start-index=1&max-results=10, lalu mengirim kueri lain dengan ?start-index=11&max-results=10, layanan tidak dapat menjamin bahwa hasilnya setara dengan ?start-index=1&max-results=20, karena penyisipan dan penghapusan dapat terjadi di antara kedua kueri tersebut.
max-results Jumlah maksimum hasil yang akan diambil Untuk layanan apa pun yang memiliki nilai max-results default (untuk membatasi ukuran feed default), Anda dapat menentukan jumlah yang sangat besar jika ingin menerima seluruh feed.
ID entri ID entri tertentu yang akan diambil
  • Jika menentukan ID entri, Anda tidak dapat menentukan parameter lainnya.
  • Bentuk ID entri ditentukan oleh layanan Data Google.
  • Tidak seperti kebanyakan parameter kueri lainnya, ID entri ditetapkan sebagai bagian dari URI, bukan sebagai pasangan name=value.
  • Contoh: http://www.example.com/feeds/jo/entry1.

Tentang kueri kategori

Kami memutuskan untuk menentukan format yang sedikit tidak biasa untuk kueri kategori. Sebagai ganti kueri seperti berikut:

http://example.com/jo?category=Fritz&category=2006

kami menggunakan:

http://example.com/jo/-/Fritz/2006

Pendekatan ini mengidentifikasi resource tanpa menggunakan parameter kueri, dan menghasilkan URI yang lebih bersih. Kami memilih pendekatan ini untuk kategori karena kami merasa bahwa kueri kategori akan menjadi kueri yang paling umum.

Kekurangan pendekatan ini adalah Anda harus menggunakan /-/ dalam kueri kategori sehingga layanan Data Google dapat membedakan kueri kategori dari URI resource lainnya, seperti http://example.com/jo/MyPost/comments.

Respons kueri

Kueri menampilkan feed Atom, entri Atom, atau feed RSS, bergantung pada parameter permintaan.

Hasil kueri berisi elemen OpenSearch berikut langsung di bawah elemen <feed> atau elemen <channel> (bergantung pada apakah hasilnya adalah Atom atau RSS):

openSearch:totalResults
Jumlah total hasil penelusuran untuk kueri (tidak harus semua ada di feed hasil).
openSearch:startIndex
Indeks berbasis 1 dari hasil pertama.
openSearch:itemsPerPage
Jumlah maksimum item yang muncul di satu halaman. Hal ini memungkinkan klien untuk membuat link langsung ke kumpulan halaman berikutnya. Namun, untuk kemungkinan kesalahan dalam menggunakan nomor ini, lihat catatan mengenai start-index pada tabel di bagian Permintaan kueri.

Feed dan entri respons Atom juga dapat menyertakan salah satu elemen Atom dan Data Google berikut (serta yang lainnya yang tercantum dalam spesifikasi Atom):

<link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="..."/>
Menentukan URI yang dapat diambil oleh feed Atom lengkap.
<link rel="http://schemas.google.com/g/2005#post" type="application/atom+xml" href="..."/>
Menentukan PostURI feed Atom (tempat entri baru dapat diposting).
<link rel="self" type="..." href="..."/>
Berisi URI resource ini. Nilai atribut type bergantung pada format yang diminta. Jika tidak ada data yang berubah untuk sementara, pengiriman GET lain ke URI ini akan menampilkan respons yang sama.
<link rel="previous" type="application/atom+xml" href="..."/>
Menentukan URI dari bagian sebelumnya dari kumpulan hasil kueri ini, jika dipotong.
<link rel="next" type="application/atom+xml" href="..."/>
Menentukan URI bagian berikutnya dari kumpulan hasil kueri ini, jika dipotong.
<link rel="edit" type="application/atom+xml" href="..."/>
Menentukan EditURI entri Atom (tempat Anda mengirim entri yang diperbarui).

Berikut adalah contoh isi respons yang merespons kueri penelusuran:

<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns:atom="http://www.w3.org/2005/Atom"
        xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">
  <id>http://www.example.com/feed/1234.1/posts/full</id> 
  <updated>2005-09-16T00:42:06Z</updated> 
  <title type="text">Books and Romance with Jo and Liz</title> 
  <link rel="alternate" type="text/html" href="http://www.example.net/"/> 
  <link rel="http://schemas.google.com/g/2005#feed"
    type="application/atom+xml"
    href="http://www.example.com/feed/1234.1/posts/full"/> 
  <link rel="http://schemas.google.com/g/2005#post"
    type="application/atom+xml"
    href="http://www.example.com/feed/1234.1/posts/full"/> 
  <link rel="self" type="application/atom+xml"
    href="http://www.example.com/feed/1234.1/posts/full"/> 
  <author>
    <name>Elizabeth Bennet</name> 
    <email>liz@gmail.com</email> 
  </author>
  <generator version="1.0"
    uri="http://www.example.com">Example Generator Engine</generator> 
  <openSearch:totalResults>2</openSearch:totalResults> 
  <openSearch:startIndex>0</openSearch:startIndex> 
  <entry>
    <id>http://www.example.com/feed/1234.1/posts/full/4521614025009481151</id> 
    <published>2005-01-09T08:00:00Z</published> 
    <updated>2005-01-09T08:00:00Z</updated> 
    <category scheme="http://www.example.com/type" term="blog.post"/> 
    <title type="text">This is the title of entry 1009</title> 
    <content type="xhtml">
      <div
        xmlns="http://www.w3.org/1999/xhtml">This is the entry body of entry 1009</div> 
    </content>
    <link rel="alternate" type="text/html"
      href="http://www.example.com/posturl"/> 
    <link rel="edit" type="application/atom+xml"
      href="http://www.example.com/feed/1234.1/posts/full/4521614025009481151"/> 
    <author>
      <name>Elizabeth Bennet</name> 
      <email>liz@gmail.com</email> 
    </author>
  </entry>
  <entry>
    <id>http://www.example.com/feed/1234.1/posts/full/3067545004648931569</id> 
    <published>2005-01-07T08:00:00Z</published> 
    <updated>2005-01-07T08:02:00Z</updated> 
    <category scheme="http://www.example.com/type" term="blog.post"/> 
    <title type="text">This is the title of entry 1007</title> 
    <content type="xhtml">
      <div
        xmlns="http://www.w3.org/1999/xhtml">This is the entry body of entry 1007</div> 
    </content>
    <link rel="alternate" type="text/html"
      href="http://www.example.com/posturl"/> 
    <link rel="edit" type="application/atom+xml"
      href="http://www.example.com/feed/1234.1/posts/full/3067545004648931569"/> 
    <author>
      <name>Elizabeth Bennet</name> 
      <email>liz@gmail.com</email> 
    </author>
  </entry>
</feed>

Jika feed yang diminta dalam format Atom, jika tidak ada parameter kueri yang ditentukan, dan jika hasilnya tidak berisi semua entri, elemen berikut akan dimasukkan ke feed tingkat teratas: <link rel="next" type="application/atom+xml" href="..."/>. Titik ini mengarah ke feed yang berisi kumpulan entri berikutnya. Set berikutnya berisi elemen <link rel="previous" type="application/atom+xml" href="..."/> yang sesuai. Dengan mengikuti semua link berikutnya, klien dapat mengambil semua entri dari feed.

Kode status HTTP

Tabel berikut menjelaskan arti berbagai kode status HTTP dalam konteks layanan Data Google.

Kode Penjelasan
200 Oke Tidak ada kesalahan.
201 DIBUAT Pembuatan resource berhasil.
304 TIDAK DIUBAH Resource belum berubah sejak waktu yang ditentukan di header If-Modified-Since permintaan.
400 PERMINTAAN BURUK Header atau URI permintaan tidak valid, atau parameter non-standar tidak didukung.
401 TIDAK DIBERIKAN Dibutuhkan otorisasi.
403 DILARANG Parameter standar tidak didukung, atau autentikasi atau otorisasi gagal.
404 TIDAK DITEMUKAN Resource (seperti feed atau entri) tidak ditemukan.
409 KONFLIK Nomor versi yang ditentukan tidak cocok dengan nomor versi terbaru resource.
KESALAHAN SERVER INTERNAL 500 Error internal. Ini adalah kode default yang digunakan untuk semua error yang tidak dikenal.

Serentak optimis (pembuatan versi)

Terkadang penting untuk memastikan bahwa beberapa klien tidak menimpa perubahan satu sama lain secara tidak sengaja. Cara ini paling mudah dilakukan dengan memastikan bahwa versi entri yang dimodifikasi oleh klien saat ini sama dengan versi yang digunakan klien untuk memodifikasinya. Jika klien kedua melakukan update sebelum klien pertama melakukannya, update klien pertama akan ditolak, karena klien pertama tidak lagi mendasarkan modifikasinya pada versi terbaru.

Di feed Data Google yang mendukung pembuatan versi, kami mencapai semantik ini dengan menambahkan ID versi ke EditURI setiap entri. Perhatikan bahwa hanya EditURI yang terpengaruh, bukan ID entri. Dalam skema ini, setiap update akan mengubah EditURI entri, sehingga menjamin bahwa update berikutnya berdasarkan versi aslinya akan gagal. Tentu saja, penghapusan identik dengan pembaruan sehubungan dengan fitur ini; jika Anda mengirim penghapusan dengan nomor versi lama, penghapusan akan gagal.

Tidak semua feed Data Google mendukung konkurensi optimistis. Dalam feed yang mendukungnya, jika server mendeteksi konflik versi pada PUT atau DELETE, server akan merespons dengan 409 Conflict. Isi respons memuat status entri saat ini (dokumen entri Atom). Klien tersebut disarankan untuk menyelesaikan konflik dan mengirimkan ulang permintaan tersebut, menggunakan EditURI dari respons 409.

Catatan motivasi dan desain

Pendekatan optimis serentak ini memungkinkan kami menerapkan semantik yang diinginkan tanpa memerlukan markup baru untuk ID versi, yang membuat respons Google Data kompatibel dengan endpoint Atom Data non-Google.

Daripada menentukan ID versi, kita dapat memilih untuk melihat stempel waktu update di setiap entri (/atom:entry/atom:updated). Namun, ada dua masalah saat menggunakan stempel waktu update:

  • Ini hanya berfungsi untuk pembaruan dan bukan penghapusan.
  • Pengujian ini memaksa aplikasi untuk menggunakan nilai tanggal/waktu sebagai ID versi, yang akan mempersulit penyesuaian Data Google di atas banyak penyimpanan data yang sudah ada.

Autentikasi

Saat klien mencoba mengakses layanan, klien mungkin perlu memberikan kredensial pengguna ke layanan, untuk menunjukkan bahwa pengguna memiliki wewenang untuk melakukan tindakan yang dimaksud.

Pendekatan yang harus digunakan klien untuk autentikasi bergantung pada jenis klien:

Di sistem ClientLogin, klien desktop akan meminta kredensial pengguna, lalu mengirimkan kredensial tersebut ke sistem autentikasi Google.

Jika autentikasi berhasil, sistem autentikasi akan menampilkan token yang kemudian digunakan klien (di header Otorisasi HTTP) saat permintaan Google Data dikirim.

Jika autentikasi gagal, server akan menampilkan kode status 403 Forbidden, beserta header WWW-Authenticate yang berisi verifikasi yang berlaku untuk autentikasi.

Sistem AuthSub berfungsi mirip, tetapi bukan meminta kredensial pengguna, tetapi menghubungkan pengguna ke layanan Google yang meminta kredensial. Layanan tersebut kemudian menampilkan token yang bisa digunakan aplikasi web; keuntungan dari pendekatan ini adalah Google (bukan front end web) menangani dan menyimpan kredensial pengguna dengan aman.

Untuk mengetahui detail tentang sistem autentikasi ini, baca Ringkasan Autentikasi Data Google atau dokumentasi Autentikasi Akun Google.

Status sesi

Banyak penerapan logika bisnis memerlukan loyalitas sesi—melacak status sesi pengguna.

Google melacak status sesi dengan dua cara: menggunakan cookie dan menggunakan token yang dapat dikirim sebagai parameter kueri. Kedua metode tersebut memberikan efek yang sama. Sebaiknya klien mendukung salah satu metode pelacakan status sesi berikut (salah satu metode ini sudah cukup). Jika klien tidak mendukung salah satu metode tersebut, layanan klien Google akan tetap berfungsi dengan layanan Data Google, tetapi performanya mungkin lebih buruk dibandingkan klien yang mendukung metode ini. Khususnya, jika klien tidak mendukung metode ini, setiap permintaan akan menghasilkan pengalihan, sehingga setiap permintaan (dan data apa pun yang terkait) dikirim ke server dua kali, yang memengaruhi performa klien dan server.

Library klien Google menangani status sesi untuk Anda, jadi jika menggunakan library, Anda tidak perlu melakukan apa pun untuk mendapatkan dukungan status sesi.

Referensi lainnya

Dokumen pihak ketiga berikut mungkin berguna untuk Anda:

Kembali ke atas