একটি ক্লায়েন্ট লাইব্রেরি তৈরি করুন

আপনি Google API-এর সাথে ব্যবহার করার জন্য বিভিন্ন ধরণের সরঞ্জাম তৈরি করার জন্য Google APIs আবিষ্কার পরিষেবা ব্যবহার করতে পারেন। যাইহোক, ডিসকভারি ডকুমেন্টের প্রাথমিক উদ্দেশ্য হল গুগলকে বিভিন্ন প্রোগ্রামিং ভাষায় ক্লায়েন্ট লাইব্রেরি তৈরি করার অনুমতি দেওয়া। এই নথিটি বর্ণনা করে যে আপনি কীভাবে Google API-এর জন্য একটি কাস্টম ক্লায়েন্ট লাইব্রেরি তৈরি করতে পারেন।

একটি স্থিতিশীল এবং বৈশিষ্ট্য-সম্পূর্ণ ক্লায়েন্ট লাইব্রেরি একটি জটিল টুল যা বিকাশ হতে কয়েক মাস সময় নিতে পারে। যাইহোক, Google API-এর জন্য একটি সাধারণ ক্লায়েন্ট লাইব্রেরি তৈরির জন্য সাধারণ নির্দেশাবলী তিনটি সহজ ধাপে বিভক্ত করা যেতে পারে:

  1. ডিসকভারি ডকুমেন্ট আনা এবং এপিআই সারফেস তৈরি করা
  2. একটি অনুরোধ রচনা
  3. একটি কল করা এবং প্রতিক্রিয়া আনা

এই পদক্ষেপগুলি নিম্নলিখিত বিভাগে আরও বিশদে বর্ণনা করা হয়েছে। আপনি উদাহরণ বিভাগে সরল APIs ক্লায়েন্ট নমুনা দেখতে পারেন কিভাবে এই নির্দেশাবলী কোড মানচিত্র.

আবিষ্কার নথি আনুন

আপনি একটি ক্লায়েন্ট লাইব্রেরি বাস্তবায়ন শুরু করার আগে, কিছু মৌলিক প্রয়োজনীয়তা রয়েছে যা প্রভাবিত করে যে আপনি কীভাবে আপনার বিকাশের পথে এগিয়ে যাবেন। উদাহরণস্বরূপ, আপনার পছন্দের প্রোগ্রামিং ভাষা হয় টাইপ করা বা আনটাইপ করা হতে পারে; যদি এটি টাইপ করা হয় তবে এটি স্ট্যাটিক বা গতিশীলভাবে টাইপ করা যেতে পারে। এটি সংকলিত বা ব্যাখ্যা করা যেতে পারে। এই প্রয়োজনীয়তাগুলি আবিষ্কারের নথি গ্রহণ এবং ব্যবহার করার জন্য আপনার পদ্ধতিকে নির্দেশ করবে।

প্রথম ডেভেলপমেন্ট টাস্ক হল ডিসকভারি ডকুমেন্ট আনা। ঠিক কখন নথিটি আনতে হবে তার জন্য আপনার কৌশল আপনার চিহ্নিত প্রয়োজনীয়তাগুলির দ্বারা নির্ধারিত হয়। উদাহরণস্বরূপ, একটি স্ট্যাটিকালি-টাইপ করা ভাষায়, আপনি প্রক্রিয়ার শুরুতে ডিসকভারি ডকুমেন্ট আনতে পারেন এবং তারপর ডিসকভারি ডকুমেন্ট দ্বারা বর্ণিত নির্দিষ্ট API-কে পরিচালনা করার জন্য কোড তৈরি করতে পারেন। একটি দৃঢ়ভাবে-টাইপ করা ভাষার জন্য, আপনি কিছু কোড তৈরি করতে পারেন এবং একটি সংকলিত লাইব্রেরি তৈরি করতে পারেন। একটি গতিশীলভাবে টাইপ করা ভাষার জন্য, আপনি প্রোগ্রামিং সারফেস ব্যবহার করার সাথে সাথে ফ্লাইতে API-এর সাথে ইন্টারফেস করার জন্য প্রোগ্রামিং কাঠামো তৈরি করতে পারেন।

একটি অনুরোধ রচনা করুন

একটি অনুরোধ রচনা দুটি পৃথক পদক্ষেপ জড়িত:

  1. রিকোয়েস্ট বডি কম্পোজিং।
  2. অনুরোধ URL নির্মাণ.

আপনাকে অনুরোধের অংশটিকে, যদি থাকে, একটি ভাষা-উপযুক্ত উপস্থাপনা থেকে সঠিক তারের বিন্যাসে রূপান্তর করতে হবে। উদাহরণস্বরূপ, একটি জাভা ক্লায়েন্ট লাইব্রেরিতে, প্রতিটি অনুরোধের প্রকারের জন্য একটি ক্লাস থাকতে পারে যা অনুরোধের ডেটা টাইপ-নিরাপদ ম্যানিপুলেশনের অনুমতি দেয় এবং JSON-এ সিরিয়ালাইজ করা যায়।

অনুরোধ URL নির্মাণ একটি সামান্য আরো জটিল প্রক্রিয়া.

API-এর প্রতিটি পদ্ধতির path বৈশিষ্ট্য URI টেমপ্লেট v04 সিনট্যাক্স ব্যবহার করে। এই সম্পত্তিতে ভেরিয়েবল থাকতে পারে, যা কোঁকড়া ধনুর্বন্ধনী দ্বারা বেষ্টিত। এখানে ভেরিয়েবল সহ একটি path সম্পত্তির একটি উদাহরণ রয়েছে:

/example/path/var

উপরের পথে, var একটি পরিবর্তনশীল। এই ভেরিয়েবলের মান সেই পদ্ধতির জন্য ডিসকভারি ডকুমেন্টের parameters বিভাগ থেকে আসে। প্রতিটি ভেরিয়েবল নামের parameters অবজেক্টে একটি সংশ্লিষ্ট মান রয়েছে। উপরের উদাহরণে, parameters বিভাগে var নামে একটি প্যারামিটার রয়েছে (এবং এর location বৈশিষ্ট্য হল path , এটি একটি পাথ পরিবর্তনশীল নির্দেশ করতে)।

একটি অনুরোধ করার সময়, আপনার URL-এ var এর মান প্রতিস্থাপন করা উচিত। উদাহরণস্বরূপ, যদি লাইব্রেরির ব্যবহারকারী এমন একটি পছন্দ করে যা var সেট করে foo মান, নতুন URL হবে /example/path/foo

এছাড়াও নোট করুন যে path সম্পত্তি একটি আপেক্ষিক URI. পরম URI গণনা করার জন্য, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. আপনি যদি আপনার অবস্থান (অঞ্চল) জানেন এবং ডিসকভারি ডকুমেন্টে endpoints প্রপার্টি থাকে, তাহলে endpoints তালিকায় আপনার অবস্থান উপস্থিত আছে কিনা তা পরীক্ষা করুন। যদি তাই হয়, endpoints তালিকা থেকে endpointUrl ধরুন যার location আপনার সাথে মেলে।
  2. যদি ডিসকভারি ডকুমেন্টে কোন endpoints প্রপার্টি না থাকে বা আপনার অবস্থান endpoints তালিকায় না থাকে বা আপনি গ্লোবাল এন্ডপয়েন্ট টার্গেট করতে চান, তাহলে ডিসকভারি ডকুমেন্টের উপরের লেভেল থেকে rootUrl প্রপার্টিটি ধরুন।

    উদাহরণ স্বরূপ, সার্ভিস ইউসেজ API-এর জন্য ডিসকভারি নথিতে rootUrl প্রপার্টি হল:

    https://serviceusage.googleapis.com/
  3. ডিসকভারি নথির শীর্ষ স্তর থেকে servicePath ধরুন। উদাহরণস্বরূপ, পরিষেবা ব্যবহার API-এর জন্য ডিসকভারি নথিতে servicePath বৈশিষ্ট্য খালি।
  4. পেতে তাদের একসাথে সংযুক্ত করুন:

    https://serviceusage.googleapis.com/
  5. path প্রপার্টি ধরুন, এটিকে একটি URI টেমপ্লেট হিসেবে প্রসারিত করুন এবং আগের ধাপ থেকে URI-এর সাথে সেই সম্প্রসারণের ফলাফলগুলিকে একত্রিত করুন। উদাহরণস্বরূপ, v1 পরিষেবা ব্যবহার API-এর serviceusage.services.enable পদ্ধতিতে, path প্রপার্টির মান হল v1/{+name}:enable । সুতরাং, পদ্ধতির জন্য সম্পূর্ণ URI হল:

    https://serviceusage.googleapis.com/v1/{+name}:enable

পরিষেবা ব্যবহার API কল করার জন্য আপনার একটি API কী প্রয়োজন নেই৷ যাইহোক, আপনি যে API কল করছেন তার যদি একটি API কী প্রয়োজন হয়, তাহলে আপনি URI-এর ক্যোয়ারী স্ট্রিং-এ API কী যোগ করতে পারেন:

REQUEST_URI?key=API_KEY

একটি কল করুন এবং প্রতিক্রিয়া পরিচালনা করুন

আপনি অনুরোধটি পাঠানোর পরে, আপনাকে প্রতিক্রিয়াটিকে যথাযথ ভাষা উপস্থাপনে ডিসিরিয়ালাইজ করতে হবে, যে ত্রুটির অবস্থাগুলি ঘটতে পারে তা পরিচালনা করার জন্য যত্ন নিতে হবে — উভয় অন্তর্নিহিত HTTP ট্রান্সপোর্ট এবং API পরিষেবা থেকে উত্পন্ন ত্রুটি বার্তাগুলিতে। ত্রুটিগুলির বিন্যাসটি Google JSON স্টাইল গাইডের অংশ হিসাবে নথিভুক্ত করা হয়েছে।

উদাহরণ

নিম্নলিখিত বিভাগটি একটি APIs ক্লায়েন্ট লাইব্রেরির একটি সাধারণ উদাহরণ দেয়।

সহজ APIs ক্লায়েন্ট

নীচে Python3 এ লেখা একটি খুব সাধারণ ক্লায়েন্ট লাইব্রেরির একটি উদাহরণ রয়েছে। ক্লায়েন্ট সার্ভিস ইউসেজ API-এর সাথে ইন্টারফেস করার জন্য একটি ইন্টারফেস তৈরি করে, তারপর সেই ইন্টারফেসটি ব্যবহার করে কম্পিউট ইঞ্জিন API ( compute.googleapis.com ) প্রজেক্ট my-project এ সক্রিয় করতে।

import httplib2
import json
import uritemplate
import urllib

# Step 1: Fetch Discovery document
DISCOVERY_URI = "https://serviceusage.googleapis.com/$discovery/rest?version=v1"
h = httplib2.Http()
resp, content = h.request(DISCOVERY_URI)
discovery = json.loads(content)
location = None # Set this to your location if appropriate
use_global_endpoint = True # Set this to False if you want to target the endpoint for your location

# Step 2.a: Construct base URI
BASE_URL = None
if not use_global_endpoint and location:
  if discovery['endpoints']:
    BASE_URL = next((item['endpointUrl'] for item in discovery['endpoints'] if item['location'] == location), None)
if not BASE_URL:
  BASE_URL = discovery['rootUrl']
BASE_URL += discovery['servicePath']

class Collection(object): pass

def createNewMethod(name, method):
  # Step 2.b Compose request
  def newMethod(**kwargs):
    body = kwargs.pop('body', None)
    url = urllib.parse.urljoin(BASE_URL, uritemplate.expand(method['path'], kwargs))
    for pname, pconfig in method.get('parameters', {}).items():
      if pconfig['location'] == 'path' and pname in kwargs:
        del kwargs[pname]
    if kwargs:
      url = url + '?' + urllib.parse.urlencode(kwargs)
    return h.request(url, method=method['httpMethod'], body=body,
                     headers={'content-type': 'application/json'})

  return newMethod

# Step 3.a: Build client surface
def build(discovery, collection):
  for name, resource in discovery.get('resources', {}).items():
    setattr(collection, name, build(resource, Collection()))
  for name, method in discovery.get('methods', {}).items():
    setattr(collection, name, createNewMethod(name, method))
  return collection

# Step 3.b: Use the client
service = build(discovery, Collection())
print (serviceusage.services.enable(name='projects/my-project/services/compute.googleapis.com'))

ক্লায়েন্টের গুরুত্বপূর্ণ উপাদানগুলি হল:

  • ধাপ 1: ডিসকভারি ডকুমেন্ট আনুন । সার্ভিস ইউসেজ API-এর জন্য ডিসকভারি ডকুমেন্ট পুনরুদ্ধার করা হয়েছে এবং একটি ডেটা স্ট্রাকচারে পার্স করা হয়েছে। যেহেতু পাইথন একটি গতিশীল টাইপ করা ভাষা, তাই ডিসকভারি ডকুমেন্ট রানটাইমে আনা যেতে পারে।
  • ধাপ 2.a: বেস URI তৈরি করুন । বেস ইউআরআই গণনা করা হয়।
  • ধাপ 2.b: অনুরোধটি রচনা করুন । যখন একটি সংগ্রহে একটি পদ্ধতি কল করা হয় তখন পদ্ধতিতে পাস করা পরামিতিগুলির সাথে URI টেমপ্লেটটি প্রসারিত হয় এবং query অবস্থান সহ প্যারামিটারগুলি URL-এর ক্যোয়ারী প্যারামিটারে রাখা হয়। অবশেষে ডিসকভারি নথিতে উল্লেখিত HTTP পদ্ধতি ব্যবহার করে কম্পোজ করা URL-এ একটি অনুরোধ পাঠানো হয়।
  • ধাপ 3.a: ক্লায়েন্ট পৃষ্ঠ তৈরি করুন । পার্সড ডিসকভারি ডকুমেন্টের উপর বারবার নিচে নেমে ক্লায়েন্ট সারফেস তৈরি করা হয়। methods বিভাগে প্রতিটি পদ্ধতির জন্য Collection বস্তুর সাথে একটি নতুন পদ্ধতি সংযুক্ত করা হয়েছে। যেহেতু সংগ্রহগুলি নেস্ট করা যেতে পারে আমরা resources সন্ধান করি এবং যদি একটি পাওয়া যায় তবে এর সমস্ত সদস্যদের জন্য পুনরাবৃত্তভাবে একটি Collection বস্তু তৈরি করি। প্রতিটি নেস্টেড সংগ্রহও Collection বস্তুর একটি বৈশিষ্ট্য হিসাবে সংযুক্ত করা হয়।
  • ধাপ 3.b: ক্লায়েন্ট ব্যবহার করুন । এটি প্রদর্শন করে কিভাবে নির্মিত API পৃষ্ঠ ব্যবহার করা হয়। প্রথমে ডিসকভারি ডকুমেন্ট থেকে একটি সার্ভিস অবজেক্ট তৈরি করা হয়, তারপর my-project এ কম্পিউট ইঞ্জিন API সক্রিয় করতে সার্ভিস ইউসেজ API ব্যবহার করা হয়।