এই পৃষ্ঠায় বর্ণনা করা হয়েছে কীভাবে আপনি Classroom API-এর প্রিভিউ ফিচারগুলো অ্যাক্সেস করতে এবং প্রিভিউ ভার্সন নির্দিষ্ট করতে পারবেন।
স্থিতিশীল v1 API-এর তুলনায় প্রিভিউ ফিচার ব্যবহার করার ক্ষেত্রে তিনটি বিষয় বিবেচনা করতে হবে:
- আহ্বানকারী গুগল ক্লাউড প্রজেক্টটিকে অবশ্যই গুগল ওয়ার্কস্পেস ডেভেলপার প্রিভিউ প্রোগ্রামে নথিভুক্ত এবং গুগল কর্তৃক অনুমোদিত হতে হবে।
- আর্লি অ্যাক্সেস বা প্রিভিউ প্রোগ্রামের এপিআই ফিচারগুলো স্ট্যান্ডার্ড ক্লায়েন্ট লাইব্রেরিতে অন্তর্ভুক্ত থাকে না এবং ডিফল্টরূপে HTTP-এর মাধ্যমে অ্যাক্সেসযোগ্য নাও হতে পারে।
- যেকোনো নির্দিষ্ট সময়ে প্রিভিউ পর্যায়ে একাধিক API স্টেট বা ভার্সন থাকতে পারে।
ক্লায়েন্ট লাইব্রেরিতে প্রিভিউ বৈশিষ্ট্যগুলি সক্রিয় করুন
ক্লাসরুম এপিআই ব্যবহারের একটি প্রচলিত উপায় হলো ক্লায়েন্ট লাইব্রেরি ব্যবহার করা। ক্লায়েন্ট লাইব্রেরি তিন প্রকারের হয়:
- গতিশীলভাবে তৈরি ক্লায়েন্ট লাইব্রেরি
- গুগল-প্রদত্ত স্ট্যাটিক ক্লায়েন্ট লাইব্রেরি
- আপনার নিজস্ব কাস্টম ক্লায়েন্ট লাইব্রেরি
ডায়নামিকভাবে তৈরি বা গুগল-প্রদত্ত স্ট্যাটিক লাইব্রেরি ব্যবহার করাই এপিআই ব্যবহারের প্রস্তাবিত উপায়। আপনার নিজের লাইব্রেরি তৈরি করার প্রয়োজন হলে, 'বিল্ড ক্লায়েন্ট লাইব্রেরিস' অংশটি দেখুন। নিজের লাইব্রেরি তৈরি করা এই নির্দেশিকার আওতার বাইরে, তবে প্রিভিউ লেবেল এবং ডিসকভারিতে তাদের ভূমিকা সম্পর্কে জানতে আপনার ডায়নামিক লাইব্রেরি অংশটি পর্যালোচনা করা উচিত।
ডায়নামিক লাইব্রেরি
পাইথনের মতো ভাষার লাইব্রেরিগুলো ডিসকভারি সার্ভিস থেকে একটি ডিসকভারি ডকুমেন্ট ব্যবহার করে রানটাইমে ক্লায়েন্ট লাইব্রেরি তৈরি করে।
ডিসকভারি ডকুমেন্ট হলো REST API-এর বর্ণনা এবং ব্যবহারের জন্য একটি মেশিন-পঠনযোগ্য স্পেসিফিকেশন। এটি ক্লায়েন্ট লাইব্রেরি, IDE প্লাগইন এবং গুগল API-এর সাথে ইন্টারঅ্যাক্ট করে এমন অন্যান্য টুল তৈরি করতে ব্যবহৃত হয়। একটি পরিষেবা একাধিক ডিসকভারি ডকুমেন্ট সরবরাহ করতে পারে।
ক্লাসরুম এপিআই পরিষেবার ( classroom.googleapis.com ) ডিসকভারি ডকুমেন্টগুলো নিম্নলিখিত এন্ডপয়েন্টে পাওয়া যাবে:
https://classroom.googleapis.com/$discovery/rest?labels=PREVIEW_LABEL&version=v1&key=API_KEY
প্রিভিউ এপিআই নিয়ে কাজ করার ক্ষেত্রে গুরুত্বপূর্ণ পার্থক্যটি হলো উপযুক্ত label নির্দিষ্ট করা। ক্লাসরুম পাবলিক প্রিভিউয়ের জন্য সেই লেবেলটি হলো DEVELOPER_PREVIEW ।
পাইথন লাইব্রেরি তৈরি করতে এবং প্রিভিউ মেথডসহ ক্লাসরুম সার্ভিসটি ইনস্ট্যানশিয়েট করতে, আপনি উপযুক্ত সার্ভিস, ক্রেডেনশিয়াল এবং লেবেলসহ ডিসকভারি ইউআরএল নির্দিষ্ট করতে পারেন:
classroom_service_with_preview_features = googleapiclient.discovery.build(
serviceName='classroom',
version='v1',
credentials=credentials,
static_discovery=False,
discoveryServiceUrl='https://classroom.googleapis.com/$discovery/rest?labels=DEVELOPER_PREVIEW&key=API_KEY)'
প্রতিটি ভাষা সম্পর্কে বিস্তারিত জানতে স্বতন্ত্র গুগল এপিআই ক্লায়েন্ট লাইব্রেরির ডকুমেন্টেশন দেখুন।
স্থির লাইব্রেরি
জাভা, নোড.জেএস, পিএইচপি, সি#, এবং গো-এর মতো ভাষায় ক্লায়েন্ট লাইব্রেরিগুলো সোর্স থেকে বিল্ড করতে হবে। এই লাইব্রেরিগুলো আপনাকে সরবরাহ করা হয়েছে এবং এতে প্রিভিউ ফিচারগুলো আগে থেকেই অন্তর্ভুক্ত রয়েছে।
পাবলিক প্রিভিউয়ের জন্য, ক্লাসরুম ক্লায়েন্ট লাইব্রেরিগুলো অন্যান্য ওয়ার্কস্পেস ডেভেলপার প্রিভিউ প্রোগ্রাম ক্লায়েন্ট লাইব্রেরির সাথে পাওয়া যাবে। প্রাইভেট প্রিভিউয়ের জন্য, স্ট্যাটিক লাইব্রেরি তৈরি করার প্রয়োজন হলে আপনার গুগল কন্ট্যাক্টের সাথে যোগাযোগ করুন।
স্ট্যান্ডার্ড ক্লায়েন্ট লাইব্রেরিগুলো ইম্পোর্ট করার পরিবর্তে এই লোকাল লাইব্রেরিগুলো ব্যবহার করার জন্য আপনাকে আপনার সাধারণ ডিপেন্ডেন্সি কনফিগারেশন পরিবর্তন করতে হতে পারে, কারণ স্ট্যান্ডার্ড ক্লায়েন্ট লাইব্রেরিগুলোতে প্রিভিউ ফিচারগুলো নেই।
উদাহরণস্বরূপ, Go ক্লায়েন্ট লাইব্রেরি ব্যবহার করার জন্য, আপনাকে আপনার go.mod ফাইলে replace ডিরেক্টিভ ব্যবহার করে স্থানীয় ডিরেক্টরি থেকে একটি মডিউল রিকোয়ার করতে হবে:
module example.com/app
go 1.21.1
require (
golang.org/x/oauth2 v0.12.0
google.golang.org/api v0.139.0 // Classroom library is in here.
)
require (
...
)
// Use a local copy of the Go client library.
replace google.golang.org/api v0.139.0 => ../google-api-go-client
আরেকটি উদাহরণ হিসেবে, আপনি যদি Node.js এবং npm ব্যবহার করেন, তাহলে package.json এ Node.js ক্লায়েন্ট লাইব্রেরি ডাউনলোড ( googleapis-classroom-1.0.4.tgz ) কে একটি লোকাল ডিপেন্ডেন্সি হিসেবে যোগ করুন:
{
"name": "nodejs-classroom-example",
"version": "1.0.0",
...
"dependencies": {
"@google-cloud/local-auth": "^2.1.0",
"googleapis": "^95.0.0",
"classroom-with-preview-features": "file:./googleapis-classroom-1.0.4.tgz"
}
}
তারপর আপনার অ্যাপ্লিকেশনে, সাধারণ ডিপেন্ডেন্সিগুলোর পাশাপাশি classroom-with-preview-features মডিউলটি রিকোয়ার করুন, এবং সেই মডিউল থেকে classroom সার্ভিসটি ইনস্ট্যানশিয়েট করুন:
const {authenticate} = require('@google-cloud/local-auth');
const {google} = require('googleapis');
const classroomWithPreviewFeatures = require('classroom-with-preview-features');
...
const classroom = classroomWithPreviewFeatures.classroom({
version: 'v1',
auth: auth,
});
...
একটি প্রিভিউ এপিআই সংস্করণ নির্দিষ্ট করুন
আপনি স্ট্যাটিক বা ডাইনামিক লাইব্রেরি ব্যবহার করুন না কেন, প্রিভিউ সুবিধাযুক্ত মেথডগুলোতে এপিআই কল করার সময় আপনাকে অবশ্যই প্রিভিউ ভার্সনটি উল্লেখ করতে হবে।
উপলব্ধ বিভিন্ন সংস্করণ এবং সেগুলিতে অন্তর্ভুক্ত বৈশিষ্ট্যগুলি ক্লাসরুম এপিআই রোডম্যাপ- এ নথিভুক্ত করা আছে। মেথড এবং ফিল্ডের রেফারেন্স ডকুমেন্টেশনেও বর্ণনা করা থাকে যে মেথড বা ফিল্ডটি কোন সংস্করণ(গুলি)তে উপলব্ধ।
রিকোয়েস্ট-এ PreviewVersion ফিল্ডটি সেট করার মাধ্যমে ভার্সন নির্দিষ্ট করা হয়। উদাহরণস্বরূপ, Rubrics CRUD প্রিভিউ API ব্যবহার করে একটি রুব্রিক তৈরি করতে, আপনাকে CREATE রিকোয়েস্ট-এ previewVersion V1_20231110_PREVIEW তে সেট করতে হবে:
rubric = service.courses().courseWork().rubrics().create(
courseId=course_id,
courseWorkId=coursework_id,
# Specify the preview version. Rubrics CRUD capabilities are
# supported in V1_20231110_PREVIEW and later.
previewVersion="V1_20231110_PREVIEW",
body=body
).execute()
একটি প্রিভিউ মেথড কলের সাথে যুক্ত রিসোর্সগুলিতে, আপনি কোন সংস্করণটি ব্যবহার করছেন তা বুঝতে সাহায্য করার জন্য, কলটিতে ব্যবহৃত previewVersion একটি রিড-অনলি ফিল্ড হিসাবে থাকে। উদাহরণস্বরূপ, পূর্ববর্তী CREATE কলের প্রতিক্রিয়াতে V1_20231110_PREVIEW মানটি থাকে:
print(json.dumps(rubric, indent=4))
{
"courseId": "123",
"courseWorkId": "456",
"creationTime": "2023-10-23T18:18:29.932Z",
"updateTime": "2023-10-23T18:18:29.932Z",
"id": "789",
"criteria": [...],
# The preview version used in the call that returned this resource.
"previewVersion": "V1_20231110_PREVIEW",
...
}
HTTP অনুরোধ
সরাসরি HTTP ব্যবহার করেও ক্লাসরুম এপিআই ব্যবহার করা সম্ভব।
যদি আপনি কোনো ক্লায়েন্ট লাইব্রেরি ছাড়া HTTP অনুরোধ করেন, তাহলেও আপনাকে প্রিভিউ ফিচারগুলো সক্রিয় করতে এবং একটি প্রিভিউ সংস্করণ নির্দিষ্ট করতে হবে। এটি করার জন্য X-Goog-Visibilities হেডারসহ একটি label এবং পূর্বোক্ত প্রিভিউ সংস্করণটিকে হয় একটি কোয়েরি প্যারামিটার অথবা POST বডি ফিল্ড হিসেবে সেট করতে হয় (সংশ্লিষ্ট স্বতন্ত্র API রেফারেন্স ডকুমেন্টেশন দেখুন)। পাবলিক প্রিভিউয়ের জন্য, লেবেলটি হলো DEVELOPER_PREVIEW ।
উদাহরণস্বরূপ, নিম্নলিখিত কার্ল অনুরোধটি উপযুক্ত ভিজিবিলিটি লেবেল এবং প্রিভিউ সংস্করণ সহ রুব্রিকস পরিষেবাতে একটি LIST কল করে:
curl \
'https://classroom.googleapis.com/v1/courses/COURSE_ID/courseWork/COURSE_WORK_ID/rubrics?key=API_KEY&previewVersion=V1_20231110_PREVIEW' \
--header 'X-Goog-Visibilities: DEVELOPER_PREVIEW' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
--header 'Accept: application/json' \
--compressedআপনি রিকোয়েস্ট বডিতেও প্রিভিউ ভার্সনটি উল্লেখ করতে পারেন, উদাহরণস্বরূপ, একটি POST রিকোয়েস্ট করার সময়:
curl --request PATCH \
'https://classroom.googleapis.com/v1/courses/COURSE_ID/courseWork/COURSE_WORK_ID/rubrics/RUBRIC_ID?updateMask=criteria&key=API_KEY&previewVersion=V1_20231110_PREVIEW' \
--header 'X-Goog-Visibilities: DEVELOPER_PREVIEW' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"criteria":"[...]"}' \
--compressedপ্রতিটি HTTP অনুরোধের API, REST ডকুমেন্টেশনে বর্ণনা করা আছে।
গুগল অ্যাপস স্ক্রিপ্ট
গুগল অ্যাপস স্ক্রিপ্ট থেকে প্রিভিউ এপিআই কল করা সম্ভব। তবে, সাধারণ অ্যাপস স্ক্রিপ্ট ব্যবহারের সাথে এর কিছু পার্থক্য রয়েছে।
- আপনি ডেভেলপার প্রিভিউ প্রোগ্রামে যে গুগল ক্লাউড প্রজেক্টটিতে নথিভুক্ত হয়েছেন, আপনার স্ক্রিপ্টটি অবশ্যই সেটি ব্যবহার করার জন্য কনফিগার করতে হবে।
- অ্যাডভান্সড সার্ভিসগুলো প্রিভিউ মেথড সমর্থন করে না, তাই আপনাকে সরাসরি HTTP ব্যবহার করে রিকোয়েস্ট করতে হবে।
- পূর্ববর্তী HTTP বিভাগে বর্ণিত পদ্ধতি অনুসারে আপনাকে অবশ্যই একটি লেবেল এবং প্রিভিউ সংস্করণ সরবরাহ করতে হবে।
অ্যাপস স্ক্রিপ্টের সাথে পরিচিত হতে এবং একটি প্রাথমিক প্রজেক্ট সেট আপ করতে সংশ্লিষ্ট কুইকস্টার্টটি দেখুন। তারপর প্রিভিউ এপিআই কল করা শুরু করতে এই নির্দেশাবলী অনুসরণ করুন:
স্ক্রিপ্ট দ্বারা ব্যবহৃত ক্লাউড প্রজেক্টটি পরিবর্তন করুন।
প্রজেক্ট সেটিংস- এ, ‘চেঞ্জ প্রজেক্ট’-এ ক্লিক করুন এবং ডেভেলপার প্রিভিউ প্রোগ্রামে নথিভুক্ত করা যেকোনো প্রজেক্টের ক্লাউড প্রজেক্ট আইডি লিখুন (ডিফল্টরূপে, অ্যাপস স্ক্রিপ্ট একটি জেনেরিক প্রজেক্ট ব্যবহার করে)। শুধুমাত্র নথিভুক্ত প্রজেক্টগুলোই প্রিভিউ মেথড কল করতে পারে।
HTTP অনুরোধগুলি কনফিগার করুন
এরপরে, এডিটর- এ আপনি যে মেথডটি কল ব্যাক করতে চান, তার HTTP রিকোয়েস্টটি কনফিগার করুন। উদাহরণস্বরূপ, কুইকস্টার্ট- এ, ক্লাসরুম সার্ভিস ব্যবহার করে কোর্সগুলোর তালিকা দেখতে এইরকম:
function listCourses() {
try {
const response = Classroom.Courses.list();
const courses = response.courses;
if (!courses || courses.length === 0) {
console.log('No courses found.');
return;
}
for (const course of courses) {
console.log('%s (%s)', course.name, course.id);
}
} catch (err) {
// TODO: Developer to handle.
console.log(err.message);
}
}
সরাসরি HTTP ব্যবহার করে সমতুল্য অপারেশনটি হলো:
function listCourses() {
const response = UrlFetchApp.fetch(
'https://classroom.googleapis.com/v1/courses', {
method: 'GET',
headers: {'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()},
contentType: 'application/json',
});
const data = JSON.parse(response.getContentText());
if (data.error) {
// TODO: Developer to handle.
console.log(err.message);
return;
}
if (!data.courses || !data.courses.length) {
console.log('No courses found.');
return;
}
for (const course of data.courses) {
console.log('%s (%s)', course.name, course.id);
}
}
অ্যাডভান্সড সার্ভিস ব্যবহার করার সময় প্রয়োজনীয় OAuth স্কোপগুলো স্বয়ংক্রিয়ভাবে নির্ধারিত হয়ে যায়, কিন্তু অ্যাপস স্ক্রিপ্টে গুগল এপিআই-তে সরাসরি HTTP কল করার জন্য আপনাকে উপযুক্ত স্কোপগুলো ম্যানুয়ালি যোগ করতে হবে।
প্রজেক্ট সেটিংস- এ, এডিটরে "appsscript.json" ম্যানিফেস্ট ফাইল দেখানোর অপশনটি চালু করুন। এডিটরে ফিরে এসে, আপনার প্রয়োজনীয় স্কোপগুলোর জন্য appscript.json ফাইলে oauthScopes যোগ করুন। একটি নির্দিষ্ট মেথডের স্কোপগুলো রেফারেন্স পেজে তালিকাভুক্ত থাকে। উদাহরণস্বরূপ, courses.courseWork.rubrics লিস্ট মেথড পেজটি দেখুন।
আপডেট করা appscript.json ফাইলটি দেখতে এইরকম হতে পারে:
{
"timeZone": "America/Los_Angeles",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"oauthScopes": [
"https://www.googleapis.com/auth/script.external_request",
"https://www.googleapis.com/auth/classroom.coursework.students",
"https://www.googleapis.com/auth/classroom.courses",
"https://www.googleapis.com/auth/spreadsheets.readonly",
"https://www.googleapis.com/auth/spreadsheets"
]
}
একটি লেবেল এবং প্রিভিউ সংস্করণ সরবরাহ করুন।
আপনার স্ক্রিপ্টে ফিরে এসে, পূর্ববর্তী HTTP বিভাগে বর্ণিত অনুযায়ী যথাযথ লেবেল এবং প্রিভিউ সংস্করণ যোগ করেছেন কিনা তা নিশ্চিত করুন। Rubrics পরিষেবাতে উদাহরণস্বরূপ LIST কলটি দেখতে হবে নিম্নরূপ:
function listRubrics() {
const courseId = COURSE_ID;
const courseWorkId = COURSE_WORK_ID;
const response = UrlFetchApp.fetch(
`https://classroom.googleapis.com/v1/courses/${courseId}/courseWork/${courseWorkId}/rubrics?previewVersion=V1_20231110_PREVIEW`, {
method: 'GET',
headers: {
'Authorization': 'Bearer ' + ScriptApp.getOAuthToken(),
'X-Goog-Visibilities': 'DEVELOPER_PREVIEW'
},
contentType: 'application/json',
muteHttpExceptions: true
});
const data = JSON.parse(response.getContentText());
console.log(data)
if (data.error) {
// TODO: Developer to handle.
console.log(error.message);
return;
}
if (!data.rubrics || !data.rubrics.length) {
console.log('No rubrics for this coursework!');
return;
}
console.log(data.rubrics);
}