تعلم واجهة برمجة تطبيقات REST الجديدة باستخدام PowerShell

يعد استخدام REST APIs لتوسيع البرامج النصية الخاصة بك ميزة مفيدة للتنفيذ. يمكنك الوصول إلى وظائف جديدة، وتوسيع إمكانيات إنشاء نصوص برمجية جديدة أكثر تقدمًا.




لكن تجربة الكثيرين عند البدء في استخدام REST APIs في البرامج النصية هي أنها تبدو خرقاء وغير طبيعية تمامًا. في هذه التدوينة نناقش:

  • ما هي REST API؟
  • كيفية قراءة الشكل الأكثر شيوعا من الوثائق
  • كيفية استخدام REST API مع PowerShell
  • بعض النصائح والحيل حول كيفية جعلها تجربة أسهل وأفضل


ما هو الراحة؟

REST، أو RESTful APIs، هي واجهة برمجة تطبيقات تستخدم طلبات HTTP لجلب البيانات أو إضافتها أو حذفها أو معالجتها في خدمات مختلفة.

ما نريد أن نفعله بالبيانات يتم تحديده عادةً من خلال ماذا طريقة HTTP التي تستخدمها. فيما يلي قائمة مختصرة بطرق HTTP وما يتم استخدامها للقيام به في REST API:

  • احصل على — اقرأ
  • مشاركة—إنشاء
  • التصحيح — التحديث/التعديل الجزئي
  • وضع — تحديث/استبدال
  • حذف—إزالة

عادةً ما يتم إرجاع البيانات التي يتم إرجاعها بواسطة REST API بتنسيق JSON.

الآن، لنبدأ باستدعاء واجهة برمجة التطبيقات (API) الأول!


قراءة المستندات

يعد تعلم قراءة وتفسير الوثائق الخاصة بواجهات برمجة تطبيقات REST المختلفة أمرًا ضروريًا لاستخدامها. لحسن الحظ، إذا كنت تعرف كيفية قراءة نمط واحد من التوثيق، فيمكنك أن تتعلم بسرعة كيفية قراءة الأنماط الأخرى.

نحن نستخدم petstore.swagger.io في هذه المقالة، لأنه يستخدم شعبية اختيال إطار عمل شائع جدًا في العالم الحقيقي.

أهم المعلومات حول نقاط نهاية REST API.

توضح الصورة السابقة أهم المعلومات حول نقاط نهاية REST API:

  • طريقة HTTP — الحصول/النشر/الحذف، وما إلى ذلك.
  • عنوان URL النسبي لنقطة نهاية REST API (عادةً ما يتم عرض عنوان URL الأساسي في أعلى صفحة الوثائق)
  • وصف موجز

الدخول في التفاصيل

الصفحة الأولى من الوثائق رائعة، ويمكنك عادةً إجراء معظم الاستدعاءات التي تتطلب طريقة HTTP GET باستخدام تلك المعلومات. لكن أساليب مثل POST وSET تتطلب عادةً النقر فوق الصف وتوسيعه للحصول على مزيد من المعلومات.


إذا قمت بالنقر فوق أحد الصفوف، فسيتم تقديم معلومات تبدو كما يلي:

نقطة نهاية REST التي يمكنها إنشاء كائن حيوان أليف جديد.

لقد قدمنا ​​هنا نقطة نهاية REST التي يمكنها إنشاء كائن حيوان أليف جديد. وهو يحدد الشكل الذي يجب أن يبدو عليه ملف JSON الذي تم توفيره في نص POST ونوع المحتوى الذي يقبله. تحدد نقاط نهاية REST الأخرى ما هي المعلمات المختلفة، ونوع البيانات التي ينبغي أن تكون، وما إلى ذلك.

هذه هي أساسيات قراءة الوثائق. الآن أصبح الأمر واضحًا، فقد حان الوقت لبدء استخدام REST APIs مع PowerShell.

احصل على (تينغ) بياناتك الأولى

عادةً ما يكون استخدام واجهات برمجة تطبيقات REST مع PowerShell أمرًا بسيطًا للغاية، وأنت تستخدم أوامر cmdlets المضمنة، لذلك لا حاجة إلى وحدات إضافية. ستقوم بجلب البيانات باستخدام طريقة GET على نقطة النهاية /pet/{petId}.


إذا قمت بتوسيع نقطة النهاية /pet/{petId} في الوثائق، فيمكنك أن ترى أن {petId} هو في الواقع معلمة تأخذ عددًا صحيحًا.

{petId} هو في الواقع معلمة تأخذ عددًا صحيحًا.

وهذا يجعل عنوان URL لجلب كائن الحيوانات الأليفة بالمعرف 1:

عادةً ما تعرض وثائق SWAGGER REST API عنوان URL الأساسي في أعلى الصفحة.

الآن، لنبدأ مع PowerShell. افتح نافذة Terminal وأدخل:

PS51 > Invoke-RestMethod -Method GET -ContentType "application/json" -Uri ""

id : 1
category : @{id=0; name=string}
name : doggie
photoUrls : {string}
tags : {@{id=0; name=string}}
status : available

يقوم Invoc-RestMethod بتحويل JSON الذي تم إرجاعه تلقائيًا إلى كائن، حيث يتم إرجاع نوع المحتوى “application/json” في الاستجابة من الخادم.

Error 404 - Not found

يعني عادةً أنه لا يمكن العثور على الكائن، وليس أن عنوان URL مكتوب بشكل خاطئ.


لقد قمت الآن بنجاح بإجراء أول استدعاء لـ REST API. لكن القدرة على الحصول على البيانات فقط هي أمر مقيد للغاية، لذلك دعونا ننشئ شيئًا باستخدام طريقة POST.

إنشاء كائن باستخدام طريقة POST

يتم استخدام طريقة POST بشكل شائع للإنشاء، مثل إنشاء مستخدمين أو إدخالات، وما إلى ذلك. يرسل طلب POST نصًا يحتوي على معلومات إلى نقطة نهاية REST، عادةً بتنسيق JSON، ولكن يمكن أيضًا أن يكون كنموذج مشفر بعنوان URL.

سوف تتعلم كيفية إنشاء كائن JSON يمكنك نشره إلى نقطة النهاية/pet.

يمكنك أن ترى كيف من المفترض أن يبدو JSON إذا قمت بتوسيع صف POST /pet في الوثائق.

  كيف يجب أن يبدو JSON إذا قمت بتوسيع صف POST /pet في الوثائق.

لنبدأ بإنشاء جدول تجزئة يمكننا تحويله لاحقًا إلى كائن JSON. يجب تجنب Raw JSON في البرامج النصية PowerShell لأنها تحد من قدراتها.


$Body = @{
    id = 19
    category = @{
        id = 45
        name = "Whatever"
    }
    name = "Dawg"
    photoUrls = @(
        "string"
    )
    tags = @(
@{
            id = 0
            name = "string"
        }
    )
    status = "available"
}

إذا كنت تواجه صعوبة في إنشاء جدول تجزئة يتحول إلى JSON الذي تريده، فقم بتثبيت
بسدكيت
الوحدة النمطية واستخدم الأمر:
$JsonString | ConvertTo-Psd

لديك الآن جدول تجزئة يمكنك تحويله إلى سلسلة JSON وPOST إلى نقطة النهاية/pet:

$JsonBody = $Body | ConvertTo-Json
$Uri = "https://petstore.swagger.io/v2/pet"
Invoke-RestMethod -ContentType "application/json" -Uri $Uri -Method Post -Body $JsonBody

id : 19
category : @{id=45; name=Whatever}
name : Dawg
photoUrls : {string}
tags : {@{id=0; name=string}}
status : available

عند إنشاء الكائن، عادةً ما تتلقى الكائن الذي تم إنشاؤه للتأكيد.

باستخدام الحذف

تقوم طريقة DELETE بحذف البيانات، وطريقة القيام بذلك تشبه إلى حد كبير طريقة GET كما هو موضح هنا:

PS51 > Invoke-RestMethod -Method DELETE -ContentType "application/json" -Uri "" 

فقط كن على علم حتى لا تحذف أي شيء قد تحتاجه.

باستخدام وضع

تقوم طريقة PUT بتحديث البيانات الموجودة بالفعل. يتم ذلك بشكل مشابه لطريقة POST، عن طريق إرسال كائن JSON كامل أو جزئي:

PS51> $Body = (PSCustomObject)@{
    id = 19
    name = "Dawg with a new name"
}

PS51> $JsonBody = $Body | ConvertTo-Json
PS51> $Uri = "https://petstore.swagger.io/v2/pet"
PS51> Invoke-RestMethod -ContentType "application/json" -Uri $Uri -Method PUT -Body $JsonBody

id name photoUrls tags
19 Dawg with a new name {} {}

عادةً ما تقوم REST API بإرجاع كائن JSON مع البيانات المستخدمة و/أو المحدثة. يمكنك أن ترى أنه تم تحديث الكائن باستخدام طريقة GET تجاهه:

PS 51> Invoke-RestMethod -ContentType "application/json" -Uri "9"

id : 19
category : @{id=45; name=Whatever}
name : Dawg with a new name
photoUrls : {string}
tags : {@{id=0; name=string}}
status : available


إنشاء الوظائف

قد تصبح كتابة هذه الأوامر كما هي مملة للغاية وغير قابلة للتطوير حقًا. إذا كنا نستدعي نقطة نهاية أكثر من مرة، فقم بإنشاء دالة لها. الأمر بسيط جدًا ولا يلزمك سوى بضعة أسطر:

Function Get-PetstorePet {
    (cmdletbinding())
    param(
        
        (Parameter(Mandatory,ValueFromPipeline))
        (int)$Id
    )
    Begin{}
    Process{
        $RestMethodParams = @{
            Uri = "https://petstore.swagger.io/v2/pet/$Id"
            ContentType = "application/json"
            Method = "GET"
        }
        Invoke-RestMethod @RestMethodParams
    }
    End{}
}

بعد إنشاء وظيفتك، يمكنك استدعاؤها في البرنامج النصي الخاص بك:

PS51> Get-PetstorePet -Id 1

id name photoUrls tags
 1 Doggie {http://picture.url} {}

يمكنك القيام بذلك من أجل طريقة POST وكذلك لإنشاء حيوان أليف جديد في متجر الحيوانات الأليفة:

Function Add-PetstorePet {
    (cmdletbinding())
    param(
        
        (Parameter(Mandatory,ValueFromPipelineByPropertyName))
        (int)$Id,
        
        (Parameter(Mandatory,ValueFromPipelineByPropertyName))
        (string)$Name,
        
        (Parameter(Mandatory,ValueFromPipelineByPropertyName))
        (string)$Status,
        
        (Parameter(Mandatory,ValueFromPipelineByPropertyName))
        (int)$CategoryId,
        
        (Parameter(Mandatory,ValueFromPipelineByPropertyName))
        (string)$CategoryName,
        
        (Parameter(Mandatory,ValueFromPipelineByPropertyName))
        (string())$PhotoUrls,
        
        (Parameter(Mandatory,ValueFromPipelineByPropertyName))
        (Hashtable())$Tags
    )
    Begin{}
    Process{
        $Body = @{
            id = $Id
            category = @{
                id = $CategoryId
                name = $CategoryName
            }
            name = $Name
            photoUrls = $PhotoUrls
            tags = $Tags
            status = $Status
        }
        $BodyJson = $Body | ConvertTo-Json
        $RestMethodParams = @{
            Uri = "https://petstore.swagger.io/v2/pet/"
            ContentType = "application/json"
            Method = "Post"
            Body = $BodyJson
        }
        Invoke-RestMethod @RestMethodParams
    }
    End{}
}

واستدعاء وظيفة PowerShell هذه بعد ذلك يجعل هذه المهمة الطويلة أسهل كثيرًا:

PS51> $AddPetStorePetsParams = @{
    Id = 44
    Name = "Birdie"
    Status = "available"
    CategoryId = 50
    CategoryName = "Hawks"
    PhotoUrls = "https://images.contoso.com/hawk.jpg"
    Tags = @(
@{
            Id=10
            Name="Not eagles"
        }
    )
}
PS51> Add-PetStorePet @AddPetStorePetsParams

id : 44
category : @{id=50; name=Hawks}
name : Birdie
photoUrls : {https://images.contoso.com/hawk.jpg}
tags : {@{id=0}}
status : available

من المحتمل أن العديد من الوحدات التي تستخدمها يوميًا تتكون من وظائف تستخدم واجهات برمجة تطبيقات REST فقط في الخلفية.

ملخص

إن تعلم كيفية استخدام REST APIs يتعلق بشكل أساسي بتعلم قراءة الوثائق. لقد استخدمنا التوثيق المستند إلى SWAGGER في هذا المنشور، لأنه يمثل كيف قد تبدو أنماط التوثيق الأخرى أيضًا.

كما أن تحويل استدعاءات واجهة برمجة التطبيقات (API) الخاصة بك إلى وظيفة يمكن أن يوفر عليك الكثير من الوقت، ويجعل عملك أسهل، ويجعل نصوصك البرمجية أكثر وضوحًا.

(العلامات للترجمة)مايكروسوفت

أضف تعليق