Hướng dẫn
Công cụ đoạn mã tương tác cho phép bạn dễ dàng kiểm thử các yêu cầu API và tạo mã mẫu dành riêng cho những yêu cầu đó. Đối với bất kỳ phương thức nào, công cụ này sẽ hiển thị đoạn mã cho một hoặc nhiều trường hợp sử dụng và mỗi trường hợp sử dụng mô tả một cách phổ biến để gọi phương thức đó. Ví dụ: bạn có thể gọi phương thức channels.list để truy xuất dữ liệu về một kênh cụ thể hoặc về kênh của người dùng hiện tại.
Thực thi yêu cầu API
Bạn có thể thực thi yêu cầu bằng cách nhấp vào nút Execute (Thực thi) bên cạnh danh sách tham số yêu cầu. Nếu trước đây bạn chưa từng cho phép ứng dụng gửi yêu cầu API thay mặt bạn, thì bạn sẽ được nhắc làm như vậy. Để đề phòng thêm, nếu yêu cầu của bạn thực hiện thao tác ghi (chèn, cập nhật hoặc xoá tài nguyên liên kết với kênh của bạn), bạn sẽ được yêu cầu xác nhận rằng bạn muốn thực thi yêu cầu đó trước khi yêu cầu thực sự được thực thi.

Chuyển đổi giữa đoạn mã và mẫu đầy đủ
Đối với mỗi trường hợp sử dụng, công cụ này sẽ hiển thị một đoạn mã xác định mã dành riêng cho phương thức cụ thể đang được gọi. Mỗi đoạn mã xác định phương thức đang được gọi cũng như các giá trị tham số và thuộc tính được dùng trong yêu cầu API.
Ngoài ra, công cụ này cũng hiển thị một mã mẫu đầy đủ đặt đoạn mã đó vào một mẫu xác định các hàm soạn sẵn để cho phép các yêu cầu API và tạo yêu cầu API. Bạn có thể dùng thanh trượt phía trên các mẫu để chuyển đổi giữa đoạn mã và mẫu đầy đủ:

Chạy mã mẫu đầy đủ trên máy
Các mã mẫu đầy đủ được thiết kế để sao chép và chạy trên máy. Xin lưu ý các điều kiện tiên quyết và các bước thiết lập sau đây để chạy các mẫu mã đầy đủ:
Điều kiện tiên quyết
- Java 1.7 trở lên
- Gradle 2.3 trở lên
Thiết lập dự án và chạy mã mẫu
-
Tạo một dự án trong Cloud Console và thiết lập thông tin xác thực cho một ứng dụng web. Đặt URI chuyển hướng được uỷ quyền cho phù hợp.
-
Làm theo hướng dẫn trong Hướng dẫn nhanh về API Java để chuẩn bị dự án, nhưng hãy thay thế nội dung của tệp
build.gradlemặc định bằng mã sau:apply plugin: 'java' apply plugin: 'application' mainClassName = 'ApiExample' sourceCompatibility = 1.7 targetCompatibility = 1.7 version = '1.0' repositories { mavenCentral() } dependencies { compile 'com.google.api-client:google-api-client:1.22.0' compile 'com.google.oauth-client:google-oauth-client-jetty:1.22.0' compile 'com.google.apis:google-api-services-youtube:v3-rev182-1.22.0' compile group: 'com.google.code.gson', name: 'gson', version: '1.7.2' compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.4.4' } compileJava { options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" } -
Từ thư mục làm việc, hãy lưu tệp
client_secrets.jsonliên kết với thông tin xác thực của bạn vàosrc/main/resources/client_secret.json. -
Từ thư mục làm việc, hãy sao chép mẫu mã đầy đủ vào
src/main/java/ApiExample.java. (Tên lớp trong mỗi mẫu làApiExampleđể bạn không cần sửa đổi tệpbuild.gradleđể chạy các mẫu khác nhau.) -
Chạy mẫu từ dòng lệnh:
gradle -q run
-
Hầu hết các mẫu đều in nội dung nào đó vào
STDOUT. Bạn cũng có thể kiểm tra trang web YouTube để xem hiệu quả của các yêu cầu ghi dữ liệu, chẳng hạn như các yêu cầu tạo danh sách phát hoặc phần kênh.
-
Tạo một dự án trong Cloud Console và thiết lập thông tin xác thực cho một ứng dụng web. Đặt nguồn gốc JavaScript được uỷ quyền để xác định URL mà bạn sẽ gửi yêu cầu (ví dụ:
http://localhost). -
Sao chép mã mẫu đầy đủ vào một tệp trên máy mà máy chủ web của bạn có thể truy cập (ví dụ:
/var/www/html/example.html). -
Tìm dòng trong mã mẫu đặt mã ứng dụng khách sẽ dùng cho yêu cầu và thay thế giá trị bằng mã ứng dụng khách cho thông tin xác thực của bạn:
gapi.client.init({ 'clientId': 'REPLACE_ME', -
Mở tệp trong trình duyệt (ví dụ:
http://localhost/example.html). Bạn nên dùng trình duyệt có bảng điều khiển gỡ lỗi, chẳng hạn như Google Chrome. -
Cho phép yêu cầu nếu cần. Nếu yêu cầu được cho phép, bảng điều khiển gỡ lỗi sẽ hiển thị phản hồi của API cho yêu cầu dưới dạng đối tượng JSON.
Điều kiện tiên quyết
- Bạn phải cài đặt Node.js.
- Công cụ quản lý gói npm (đi kèm với Node.js).
- Thư viện ứng dụng Google API cho Node.js:
npm install googleapis --save
- Có quyền truy cập vào Internet và trình duyệt web.
- Tài khoản Google.
Thiết lập dự án và chạy mã mẫu
-
Tạo một dự án trong Cloud Console và thiết lập thông tin xác thực OAuth 2.0 trong Google Cloud Console. Khi thiết lập thông tin xác thực, hãy đặt loại ứng dụng thành Other (Khác).
-
Lưu tệp
client_secret.jsonliên kết với thông tin xác thực của bạn vào một tệp trên máy. -
Sao chép mã mẫu đầy đủ vào một tệp trên máy trong cùng thư mục với tệp
client_secret.json(hoặc sửa đổi mẫu để xác định chính xác vị trí của tệp đó. -
Chạy mẫu từ dòng lệnh:
node sample.js
-
Hầu hết các mẫu đều in nội dung nào đó vào
STDOUThoặc, đối với các ví dụ về ứng dụng web, vào trang web mà bạn đang xem. Bạn cũng có thể kiểm tra trang web YouTube để xem hiệu quả của các yêu cầu ghi dữ liệu, chẳng hạn như các yêu cầu tạo danh sách phát hoặc phần kênh.
Điều kiện tiên quyết
- Python 2.6 trở lên
- Công cụ quản lý gói pip
- Thư viện ứng dụng Google API cho Python:
pip install --upgrade google-api-python-client
- google-auth, google-auth-oauthlib và google-auth-httplib2 để cho phép người dùng.
pip install --upgrade google-auth google-auth-oauthlib google-auth-httplib2
- Khung ứng dụng web Flask Python (nếu bạn đang chạy các mẫu Python cho ứng dụng máy chủ web).
pip install --upgrade flask
- Thư viện HTTP yêu cầu.
pip install --upgrade requests
Thiết lập dự án và chạy mã mẫu
-
Tạo một dự án trong Cloud Console và thiết lập thông tin xác thực OAuth 2.0 trong Google Cloud Console. Khi thiết lập thông tin xác thực, hãy đặt loại ứng dụng thành Web application (Ứng dụng web) cho các mẫu sử dụng khung ứng dụng web Flask Python và cũng đặt URI chuyển hướng được uỷ quyền cho những thông tin xác thực đó. Nếu không, hãy đặt loại ứng dụng thành Other (Khác).
-
Lưu tệp
client_secret.jsonliên kết với thông tin xác thực của bạn vào một tệp trên máy. -
Sao chép mã mẫu đầy đủ vào một tệp trên máy trong cùng thư mục với tệp
client_secret.json(hoặc sửa đổi mẫu để xác định chính xác vị trí của tệp đó. -
Chạy mẫu từ dòng lệnh:
python sample.py
Lưu ý đối với các ví dụ về ứng dụng máy chủ web:
Nếu bạn đang chạy các mẫu Python cho ứng dụng máy chủ web, thì việc chạy tập lệnh sẽ khởi động một máy chủ web trên máy. Để thực sự thực thi yêu cầu API, bạn cần chuyển đến trang web được phân phát trong trình duyệt. Ví dụ: các mẫu Python sử dụng khung ứng dụng web Flask chứa một dòng như sau:
app.run('localhost', 8080, debug=True)
Mã này khởi động một máy chủ web trên máy tạihttp://localhost:8080. Tuy nhiên, tập lệnh sẽ không cố gắng thực thi yêu cầu API cho đến khi bạn thực sự chuyển đếnhttp://localhost:8080trong trình duyệt. (URL cho máy chủ trên máy của bạn cũng phải được đặt làm URI chuyển hướng được uỷ quyền cho thông tin xác thực của bạn.) -
Hầu hết các mẫu đều in nội dung nào đó vào
STDOUThoặc, đối với các ví dụ về ứng dụng web, vào trang web mà bạn đang xem. Bạn cũng có thể kiểm tra trang web YouTube để xem hiệu quả của các yêu cầu ghi dữ liệu, chẳng hạn như các yêu cầu tạo danh sách phát hoặc phần kênh.
Điều kiện tiên quyết
- PHP 5.4 trở lên có giao diện dòng lệnh (CLI) và tiện ích JSON đã cài đặt.
- Công cụ quản lý phần phụ thuộc Composer.
- Thư viện ứng dụng Google API cho PHP:
php composer.phar require google/apiclient:^2.0
Thiết lập dự án và chạy mã mẫu
-
Tạo một dự án trong Cloud Console và thiết lập thông tin xác thực OAuth 2.0 trong Google Cloud Console. Khi thiết lập thông tin xác thực, hãy đặt loại ứng dụng thành Other (Khác).
-
Lưu tệp
client_secret.jsonliên kết với thông tin xác thực của bạn vào một tệp trên máy. -
Sao chép mã mẫu đầy đủ vào một tệp trên máy trong cùng thư mục với tệp
client_secret.json(hoặc sửa đổi mẫu để xác định chính xác vị trí của tệp đó. -
Chạy mẫu từ dòng lệnh:
php sample.php
-
Hầu hết các mẫu đều in nội dung nào đó vào
STDOUThoặc, đối với các ví dụ về ứng dụng web, vào trang web mà bạn đang xem. Bạn cũng có thể kiểm tra trang web YouTube để xem hiệu quả của các yêu cầu ghi dữ liệu, chẳng hạn như các yêu cầu tạo danh sách phát hoặc phần kênh.
Điều kiện tiên quyết
- Ruby 2.0 trở lên
- Thư viện ứng dụng Google API cho Ruby:
gem install google-api-client
Thiết lập dự án và chạy mã mẫu
-
Tạo một dự án trong Cloud Console và thiết lập thông tin xác thực OAuth 2.0 trong Google Cloud Console. Khi thiết lập thông tin xác thực, hãy đặt loại ứng dụng thành Other (Khác).
-
Lưu tệp
client_secret.jsonliên kết với thông tin xác thực của bạn vào một tệp trên máy. -
Sao chép mã mẫu đầy đủ vào một tệp trên máy trong cùng thư mục với tệp
client_secret.json(hoặc sửa đổi mẫu để xác định chính xác vị trí của tệp đó. -
Chạy mẫu từ dòng lệnh:
ruby sample.rb
-
Hầu hết các mẫu đều in nội dung nào đó vào
STDOUThoặc, đối với các ví dụ về ứng dụng web, vào trang web mà bạn đang xem. Bạn cũng có thể kiểm tra trang web YouTube để xem hiệu quả của các yêu cầu ghi dữ liệu, chẳng hạn như các yêu cầu tạo danh sách phát hoặc phần kênh.
-
Tạo một dự án trong Cloud Console và thiết lập thông tin xác thực OAuth 2.0 trong Google Cloud Console. Khi thiết lập thông tin xác thực, hãy đặt loại ứng dụng thành Other (Khác).
-
Lưu tệp
client_secret.jsonliên kết với thông tin xác thực của bạn vào một tệp trên máy. -
Sao chép mã mẫu đầy đủ vào một tệp trên máy trong cùng thư mục với tệp
client_secret.json(hoặc sửa đổi mẫu để xác định chính xác vị trí của tệp đó. -
Chạy mẫu từ dòng lệnh:
go run sample.go
-
Hầu hết các mẫu đều in nội dung nào đó vào
STDOUThoặc, đối với các ví dụ về ứng dụng web, vào trang web mà bạn đang xem. Bạn cũng có thể kiểm tra trang web YouTube để xem hiệu quả của các yêu cầu ghi dữ liệu, chẳng hạn như các yêu cầu tạo danh sách phát hoặc phần kênh.
Sử dụng các hàm soạn sẵn
Như đã lưu ý ở trên, các mã mẫu đầy đủ sử dụng mã nguyên mẫu để cho phép và tạo yêu cầu API. Ví dụ: hàm build_resource trong các mẫu Python sử dụng một từ điển liên kết các thuộc tính tài nguyên với giá trị của chúng để tạo một tài nguyên có thể được chèn hoặc cập nhật. Các hàm tương tự được cung cấp cho JavaScript, PHP, Ruby, Go và Apps Script.
Ví dụ: các thẻ bên dưới cho biết cách gọi các hàm soạn sẵn để tạo tài nguyên playlist. Xin lưu ý rằng các hàm soạn sẵn không cần biết loại tài nguyên đang được tạo.
function createResource(properties) {
var resource = {};
var normalizedProps = properties;
for (var p in properties) {
var value = properties[p];
if (p && p.substr(-2, 2) == '[]') {
var adjustedName = p.replace('[]', '');
if (value) {
normalizedProps[adjustedName] = value.split(',');
}
delete normalizedProps[p];
}
}
for (var p in normalizedProps) {
// Leave properties that don't have values out of inserted resource.
if (normalizedProps.hasOwnProperty(p) && normalizedProps[p]) {
var propArray = p.split('.');
var ref = resource;
for (var pa = 0; pa < propArray.length; pa++) {
var key = propArray[pa];
if (pa == propArray.length - 1) {
ref[key] = normalizedProps[p];
} else {
ref = ref[key] = ref[key] || {};
}
}
};
}
return resource;
}
var resource = createResource({
'snippet.title': 'Sample playlist ',
'snippet.description': 'This is a sample playlist description.',
'snippet.tags[]': 'JavaScript code, interactive',
'snippet.defaultLanguage': '',
'status.privacyStatus': 'private'
}
# Build a resource based on a list of properties given as key-value pairs.
# Leave properties with empty values out of the inserted resource.
def build_resource(properties):
resource = {}
for p in properties:
# Given a key like "snippet.title", split into "snippet" and "title", where
# "snippet" will be an object and "title" will be a property in that object.
prop_array = p.split('.')
ref = resource
for pa in range(0, len(prop_array)):
is_array = False
key = prop_array[pa]
# Convert a name like "snippet.tags[]" to snippet.tags, but handle
# the value as an array.
if key[-2:] == '[]':
key = key[0:len(key)-2:]
is_array = True
if pa == (len(prop_array) - 1):
# Leave properties without values out of inserted resource.
if properties[p]:
if is_array:
ref[key] = properties[p].split(',')
else:
ref[key] = properties[p]
elif key not in ref:
# For example, the property is "snippet.title", but the resource does
# not yet have a "snippet" object. Create the snippet object here.
# Setting "ref = ref[key]" means that in the next time through the
# "for pa in range ..." loop, we will be setting a property in the
# resource's "snippet" object.
ref[key] = {}
ref = ref[key]
else:
# For example, the property is "snippet.description", and the resource
# already has a "snippet" object.
ref = ref[key]
return resource
resource = build_resource({
'snippet.title': 'Sample playlist ',
'snippet.description': 'This is a sample playlist description.',
'snippet.tags[]': 'Python code, interactive',
'snippet.defaultLanguage': '',
'status.privacyStatus': 'private'}
// Add a property to the resource.
function addPropertyToResource(&$ref, $property, $value) {
$keys = explode(".", $property);
$is_array = false;
foreach ($keys as $key) {
// Convert a name like "snippet.tags[]" to "snippet.tags" and
// set a boolean variable to handle the value like an array.
if (substr($key, -2) == "[]") {
$key = substr($key, 0, -2);
$is_array = true;
}
$ref = &$ref[$key];
}
// Set the property value. Make sure array values are handled properly.
if ($is_array && $value) {
$ref = $value;
$ref = explode(",", $value);
} elseif ($is_array) {
$ref = array();
} else {
$ref = $value;
}
}
// Build a resource based on a list of properties given as key-value pairs.
function createResource($properties) {
$resource = array();
foreach ($properties as $prop => $value) {
if ($value) {
addPropertyToResource($resource, $prop, $value);
}
}
return $resource;
}
$propertyObject = createResource(array(
'snippet.title' => 'Sample playlist ',
'snippet.description' => 'This is a sample playlist description.',
'snippet.tags[]' => 'Python code, interactive',
'snippet.defaultLanguage' => '',
'status.privacyStatus' => 'private'));
# Build a resource based on a list of properties given as key-value pairs.
def create_resource(properties)
resource = {}
properties.each do |prop, value|
ref = resource
prop_array = prop.to_s.split(".")
for p in 0..(prop_array.size - 1)
is_array = false
key = prop_array[p]
if key[-2,2] == "[]"
key = key[0...-2]
is_array = true
end
if p == (prop_array.size - 1)
if is_array
if value == ""
ref[key.to_sym] = []
else
ref[key.to_sym] = value.split(",")
end
elsif value != ""
ref[key.to_sym] = value
end
elsif ref.include?(key.to_sym)
ref = ref[key.to_sym]
else
ref[key.to_sym] = {}
ref = ref[key.to_sym]
end
end
end
return resource
end
resource = create_resource({
'snippet.title': 'Sample playlist ',
'snippet.description': 'This is a sample playlist description.',
'snippet.tags[]': 'Ruby code, interactive',
'snippet.default_language': '',
'status.privacy_status': 'private'})
// Build an object from an object containing properties as key-value pairs
function createResource(properties) {
var res = {};
var normalizedProps = {};
for (var p in properties) {
var value = properties[p];
if (p.substr(-2, 2) == '[]' && value) {
var adjustedName = p.replace('[]', '');
normalizedProps[adjustedName] = value.split(',');
} else {
normalizedProps[p] = value;
}
}
for (var p in normalizedProps) {
if (normalizedProps.hasOwnProperty(p) && normalizedProps[p]) {
var propArray = p.split('.');
var ref = res;
for (var pa = 0; pa < propArray.length; pa++) {
var key = propArray[pa];
if (pa == propArray.length - 1) {
ref[key] = normalizedProps[p];
} else {
ref = ref[key] = ref[key] || {};
}
}
};
}
return res;
}
var resource = createResource({
'snippet.title': 'Sample playlist ',
'snippet.description': 'This is a sample playlist description.',
'snippet.tags[]': 'Apps Script code, interactive',
'snippet.defaultLanguage': '',
'status.privacyStatus': 'private'
});
func addPropertyToResource(ref map[string]interface{}, keys []string, value string, count int) map[string]interface{} {
for k := count; k < (len(keys) - 1); k++ {
switch val := ref[keys[k]].(type) {
case map[string]interface{}:
ref[keys[k]] = addPropertyToResource(val, keys, value, (k + 1))
case nil:
next := make(map[string]interface{})
ref[keys[k]] = addPropertyToResource(next, keys, value, (k + 1))
}
}
// Only include properties that have values.
if (count == len(keys) - 1 && value != "") {
valueKey := keys[len(keys)-1]
if valueKey[len(valueKey)-2:] == "[]" {
ref[valueKey[0:len(valueKey)-2]] = strings.Split(value, ",")
} else if len(valueKey) > 4 && valueKey[len(valueKey)-4:] == "|int" {
ref[valueKey[0:len(valueKey)-4]], _ = strconv.Atoi(value)
} else if value == "true" {
ref[valueKey] = true
} else if value == "false" {
ref[valueKey] = false
} else {
ref[valueKey] = value
}
}
return ref
}
func createResource(properties map[string]string) string {
resource := make(map[string]interface{})
for key, value := range properties {
keys := strings.Split(key, ".")
ref := addPropertyToResource(resource, keys, value, 0)
resource = ref
}
propJson, err := json.Marshal(resource)
if err != nil {
log.Fatal("cannot encode to JSON ", err)
}
return string(propJson)
}
func main() {
properties := (map[string]string{
"snippet.title": "Sample playlist ",
"snippet.description": "This is a sample playlist description.",
"snippet.tags[]": "Go code, interactive",
"snippet.defaultLanguage": "",
"status.privacyStatus": "private",
})
res := createResource(properties)Tải tài nguyên hiện có
Để kiểm thử yêu cầu cập nhật tài nguyên hiện có, bạn có thể tải các giá trị thuộc tính hiện tại cho tài nguyên đó vào biểu mẫu cập nhật. Ví dụ: để cập nhật siêu dữ liệu về một video, hãy nhập mã video vào trường thuộc tính id rồi nhấp vào nút Load resource (Tải tài nguyên). Các giá trị thuộc tính hiện tại sẽ tải vào biểu mẫu và bạn chỉ có thể cập nhật những giá trị mà bạn muốn thay đổi.