একটি ক্লায়েন্ট লাইব্রেরি নির্মাণ

ভূমিকা

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

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

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

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

ধাপ 1 : আবিষ্কার ডকুমেন্ট আনুন

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

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

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

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

  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. ডিসকভারি ডকুমেন্টের উপরের স্তর থেকে rootUrl প্রপার্টি ধরুন।
    উদাহরণস্বরূপ, Google ক্লাউড সার্ভিস ম্যানেজমেন্ট API- এর জন্য ডিসকভারি নথিতে rootUrl প্রপার্টি হল:

    https://servicemanagement.googleapis.com/

  2. ডিসকভারি নথির শীর্ষ স্তর থেকে servicePath ধরুন।
    উদাহরণ স্বরূপ, Google ক্লাউড সার্ভিস ম্যানেজমেন্ট API-এর জন্য ডিসকভারি নথিতে servicePath প্রপার্টি খালি।

  3. পেতে তাদের একসাথে সংযুক্ত করুন:

    https://servicemanagement.googleapis.com/

  4. path প্রপার্টি ধরুন, এটিকে একটি URI টেমপ্লেট হিসেবে প্রসারিত করুন এবং আগের ধাপ থেকে URI-এর সাথে সেই সম্প্রসারণের ফলাফলগুলিকে একত্রিত করুন।
    উদাহরণস্বরূপ, Google ক্লাউড সার্ভিস ম্যানেজমেন্ট API-এর get service পদ্ধতিতে, path প্রপার্টির মান হল v1/services/{serviceName} । সুতরাং, পদ্ধতির জন্য সম্পূর্ণ URI হল:

    https://servicemanagement.googleapis.com/v1/services/{serviceName}

Google ক্লাউড সার্ভিস ম্যানেজমেন্ট API কল করার জন্য একটি API কী প্রয়োজন। সুতরাং, একটি API কী প্রয়োগ করার পরে, API আবিষ্কার পরিষেবার পরিষেবা সংজ্ঞা পেতে সম্পূর্ণ URI হল:

https://servicemanagement.googleapis.com/v1/services/discovery.googleapis.com?key= API_KEY

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

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

উদাহরণ

গুগল এপিআই ডিসকভারি সার্ভিস ব্যবহার করে বাস্তবায়িত ক্লায়েন্ট লাইব্রেরি এবং টুলের কিছু নির্দিষ্ট উদাহরণের জন্য, লাইব্রেরি এবং নমুনা ডকুমেন্ট দেখুন। উপরন্তু, নিম্নলিখিত বিভাগটি একটি APIs ক্লায়েন্ট লাইব্রেরির একটি সহজ উদাহরণ দেয়।

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

নীচে Python3 এ লেখা একটি খুব সাধারণ ক্লায়েন্ট লাইব্রেরির একটি উদাহরণ রয়েছে। ক্লায়েন্ট Google ক্লাউড সার্ভিস ম্যানেজমেন্ট API এর সাথে ইন্টারঅ্যাক্ট করার জন্য একটি ইন্টারফেস তৈরি করে, তারপর সেই ইন্টারফেসটি ব্যবহার করে API ডিসকভারি সার্ভিসের পরিষেবা সংজ্ঞা পান।

সতর্কতা : নীচের কোডটি একটি সাধারণ ক্লায়েন্ট লাইব্রেরির একটি উল্লেখযোগ্যভাবে সরলীকৃত সংস্করণ। এটি একটি অসম্পূর্ণ বাস্তবায়ন যা একটি ক্লায়েন্ট লাইব্রেরি নির্মাণের কিছু দিক প্রদর্শন করার জন্য প্রদান করা হয়। এটি উৎপাদন-প্রস্তুত কোড নয়।

import httplib2
import json
import uritemplate
import urllib

# Step 1: Fetch Discovery document
DISCOVERY_URI = "https://servicemanagement.googleapis.com/$discovery/rest?version=v1"
h = httplib2.Http()
resp, content = h.request(DISCOVERY_URI)
discovery = json.loads(content)

# Step 2.a: Construct base URI
BASE_URL = discovery['rootUrl'] + 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 (service.services.get(serviceName='discovery.googleapis.com', key='API_KEY'))

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

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