𝗥𝗼𝗹𝗹𝗶𝗻𝗴 𝗮 𝗚𝗼𝗼𝗴𝗹𝗲 𝗦𝗲𝗿𝘃𝗶𝗰𝗲 𝗔𝗰𝗰𝗼𝘂𝗻𝘁 𝗝𝗪𝗧 𝗶𝗻 𝗡𝗼𝗱𝗲.𝗷𝘀
বেশিরভাগ ডেভেলপার Google API কল করার জন্য googleapis npm প্যাকেজটি ব্যবহার করেন। এটি ভালো কাজ করে। কিন্তু এটি আপনার প্রজেক্টে ৩৮০KB এবং ৪৫০টিরও বেশি ডিপেন্ডেন্সি (dependencies) যোগ করে।
আপনি যদি একটি সাধারণ CI স্ক্রিপ্টের জন্য মাত্র একটি API ব্যবহার করতে চান, তবে এটি প্রয়োজনের তুলনায় অনেক বেশি (overkill)।
আমি মাত্র তিনটি Node.js built-in মডিউল—crypto, fetch, এবং URL ব্যবহার করে URL ইনডেক্স স্ট্যাটাস চেক করার জন্য একটি স্ক্রিপ্ট তৈরি করেছি। এতে কোনো এক্সটার্নাল প্যাকেজ ব্যবহার করা হয়নি।
অথেন্টিকেশনটি RFC 7523 অনুসরণ করে। এটি করার পদ্ধতি নিচে দেওয়া হলো:
- আপনার service account email এবং private key ব্যবহার করে একটি JWT তৈরি করুন।
- সেই JWT-টি Google token endpoint-এ POST করুন।
- একটি স্বল্পমেয়াদী (short-lived) access token গ্রহণ করুন।
- আপনার API রিকোয়েস্টের জন্য Bearer header হিসেবে সেই টোকেনটি ব্যবহার করুন।
JWT-এর জন্য এই claim-গুলো প্রয়োজন:
- iss: আপনার client email।
- scope: webmasters.readonly।
- aud: Google token URL।
- iat: বর্তমান সময়।
- exp: বর্তমান সময় প্লাস ৩৬০০ সেকেন্ড।
নোট: webmasters scope ব্যবহার করুন। নতুন searchconsole scope URL Inspection API-এর জন্য কাজ করে না।
সবচেয়ে কঠিন অংশ হলো Base64url encoding। এটিকে সামঞ্জস্যপূর্ণ করার জন্য আপনাকে অবশ্যই padding বাদ দিতে হবে এবং ক্যারেক্টারগুলো পরিবর্তন করতে হবে। আপনি আপনার RSA private key দিয়ে JWT সাইন করার জন্য node:crypto মডিউল ব্যবহার করতে পারেন। আপনার Google Cloud JSON ফাইল থেকে পাওয়া key সরাসরি কাজ করবে।
যখন আপনি টোকেনটি এক্সচেঞ্জ করবেন, তখন raw error response-টি লগ করুন। Google "Service account not found"-এর মতো সুনির্দিষ্ট মেসেজ প্রদান করে। এটি আপনাকে দ্রুত ত্রুটি (error) সমাধান করতে সাহায্য করবে।
এই পদ্ধতিটি সবচেয়ে ভালো কাজ করে যখন:
- আপনি একটি CI পাইপলাইনে একটি মাত্র API ব্যবহার করেন।
- আপনি আপনার রিপোজিটরি (repo) হালকা রাখতে চান।
- আপনি অথেন্টিকেশন ফ্লো (auth flow) বুঝতে চান।
এটি ব্যবহার করবেন না যদি:
- আপনি অনেকগুলো ভিন্ন ভিন্ন Google API কল করেন।
- আপনার অটোমেটিক টোকেন রিফ্রেশিং প্রয়োজন হয়।
- আপনি একটি বড় প্রোডাকশন সার্ভার তৈরি করছেন।
নির্দিষ্ট বা সীমিত কাজের জন্য শত শত লুকানো ডিপেন্ডেন্সির চেয়ে ছোট এবং পঠনযোগ্য (readable) কোড অনেক ভালো।