arazzo thumbnail

مشخصهٔ Arazzo چیست؟

فراخوانی‌های API به‌ندرت به‌تنهایی انجام می‌شوند. بسیار رایج‌تر است که یک تابع برنامه‌نویسی به مجموعه‌ای از فراخوانی‌های API نیاز داشته باشد که به آن «گردش کار API» (API workflow) می‌گویند. برای کمک به توصیف این موقعیت‌ها، OpenAPI Initiative مشخصهٔ جدیدی به نام Arazzo منتشر کرده که دقیقاً برای پوشش گردش کارهای API طراحی شده است.

در API Days ۲۰۲۴ هلسینکی، فرانک کیل‌کامینز از شرکت SmartBear مشخصهٔ Arazzo را معرفی کرد و توضیح داد که این مشخصه چگونه گروهی از APIها و روابط بین آن‌ها را توصیف می‌کند. ما مشخصه را بررسی کرده‌ایم و یک راهنمای کوتاه و مقدماتی برای شروع کار با این استاندارد جدید API آماده کرده‌ایم.

مقدمه‌ای بر مشخصهٔ Arazzo

مشخصهٔ Arazzo: یک «تاروپود» برای گردش کارهای API قطعی و تعیین‌شده.

مشخصهٔ Arazzo راه‌حلی برای افزودن لایه‌ای از انتزاع ارائه می‌دهد تا مجموعه‌ای از فراخوانی‌های API را تعریف کند. همچنین وابستگی‌های آن‌ها را توصیف می‌کند که می‌توانند به هم متصل شوند تا نتیجهٔ خاصی تولید کنند. مشخصهٔ Arazzo هم برای ماشین قابل خواندن است و هم برای انسان. همین ویژگی ماشین‌خوان بودن، اکوسیستم غنی از ابزارها و قابلیت‌ها را ممکن می‌سازد.

آرازو (Arazzo) طوری طراحی شده که تعویض APIها در یک گردش کار سریع و آسان باشد. همچنین برای ساده‌سازی مستندات بزرگ و دست‌وپاگیر API ساخته شده است. به همین دلیل، استفاده از Arazzo می‌تواند هم تجربهٔ کاربری (UX) و هم تجربهٔ توسعه‌دهنده (DX) را بهبود بخشد.

درون مشخصهٔ Arazzo

آرازو (Arazzo) تفاوت زیادی با یک مشخصهٔ API معمولی ندارد. یک فایل مشخصهٔ Arazzo شامل تمام اطلاعات مربوط به یک گردش کار API به فرمت JSON یا YAML است. اگر خودتان Arazzo را امتحان می‌کنید، بهترین روش این است که فایل را arazzo.json یا arazzo.yaml نام‌گذاری کنید.

هستهٔ مشخصهٔ Arazzo، شیء مشخصهٔ Arazzo (Arazzo Specification Object) است. مانند مشخصهٔ OpenAPI، این شیء مشخص می‌کند که از کدام نسخهٔ Arazzo استفاده می‌شود. همچنین شامل متادیتا دربارهٔ گردش کار است که ابزارها می‌توانند از آن استفاده کنند. فیلد sourceDescriptions فهرستی از توصیفات منبع (مثلاً توصیفات OpenAPI) است. بعد از آن شیء workflows قرار دارد که تمام گردش کارهای مورد استفاده در مشخصه را شامل ورودی‌ها، وابستگی‌ها و گام‌های جداگانه فهرست می‌کند. در نهایت شیء components شامل اسکیماهایی است که در توصیف Arazzo به کار می‌روند.

نمونه‌ای از شیء مشخصهٔ Arazzo:

YAML
arazzo: 1.0.0
info:
  title: A pet purchasing workflow
  summary: This Arazzo Description showcases the workflow for how to purchase a pet through a sequence of API calls
  description: |
      This Arazzo Description walks you through the workflow and steps of `searching` for, `selecting`, and `purchasing` an available pet.
  version: 1.0.1
sourceDescriptions:
- name: petStoreDescription
  url: https://github.com/swagger-api/swagger-petstore/blob/master/src/main/resources/openapi.yaml
  type: openapi

workflows:
- workflowId: loginUserAndRetrievePet
  summary: Login User and then retrieve pets
  description: This workflow lays out the steps to login a user and then retrieve pets
  inputs:
      type: object
      properties:
          username:
              type: string
          password:
              type: string
  steps:
  - stepId: loginStep
    description: This step demonstrates the user login step
    operationId: loginUser
    parameters:
      # parameters to inject into the loginUser operation (parameter name must be resolvable at the referenced operation and the value is determined using {expression} syntax)
      - name: username
        in: query
        value: $inputs.username
      - name: password
        in: query
        value: $inputs.password
    successCriteria:
      # assertions to determine step was successful
      - condition: $statusCode == 200
    outputs:
      # outputs from this step
      tokenExpires: $response.header.X-Expires-After
      rateLimit: $response.header.X-Rate-Limit
      sessionToken: $response.body
  - stepId: getPetStep
    description: retrieve a pet by status from the GET pets endpoint
    operationPath: '{$sourceDescriptions.petStoreDescription.url}#/paths/~1pet~1findByStatus/get'
    parameters:
      - name: status
        in: query
        value: 'available'
      - name: Authorization
        in: header
        value: $steps.loginStep.outputs.sessionToken
    successCriteria:
      - condition: $statusCode == 200
    outputs:
      # outputs from this step
      availablePets: $response.body
  outputs:
      available: $steps.getPetStep.outputs.availablePets

درون شیء Workflows

بیایید لحظه‌ای فقط به بخش workflows توجه کنیم که بخش عمدهٔ مشخصهٔ Arazzo را تشکیل می‌دهد.

YAML
workflows:
- workflowId: loginUserAndRetrievePet
  summary: Login User and then retrieve pets
  description: This workflow lays out the steps to login a user and then retrieve pets
  inputs:
      type: object
      properties:
          username:
              type: string
          password:
              type: string
  steps:
  - stepId: loginStep
    description: This step demonstrates the user login step
    operationId: loginUser
    parameters:
      # parameters to inject into the loginUser operation (parameter name must be resolvable at the referenced operation and the value is determined using {expression} syntax)
      - name: username
        in: query
        value: $inputs.username
      - name: password
        in: query
        value: $inputs.password
    successCriteria:
      # assertions to determine step was successful
      - condition: $statusCode == 200
    outputs:
      # outputs from this step
      tokenExpires: $response.header.X-Expires-After
      rateLimit: $response.header.X-Rate-Limit
      sessionToken: $response.body
  - stepId: getPetStep
    description: retrieve a pet by status from the GET pets endpoint
    operationPath: '{$sourceDescriptions.petStoreDescription.url}#/paths/~1pet~1findByStatus/get'
    parameters:
      - name: status
        in: query
        value: 'available'
      - name: Authorization
        in: header
        value: $steps.loginStep.outputs.sessionToken
    successCriteria:
      - condition: $statusCode == 200
    outputs:
      # outputs from this step
      availablePets: $response.body
  outputs:
      available: $steps.getPetStep.outputs.availablePets

ابتدا می‌بینیم که این گردش کار loginUserAndRetrievePet نام دارد. سپس خلاصه و توضیح کوتاهی دربارهٔ عملکرد آن آمده است. بخش inputs بعدی است که به کاربر می‌گوید چه داده‌هایی انتظار می‌رود و فرمت آن‌ها چیست.

بخش steps بخش اصلی شیء workflows را تشکیل می‌دهد. هر گام شامل توضیح و خلاصه، پارامترها، معیارهای موفقیت و در نهایت خروجی‌های موفق است. شیء outputs در انتهای گردش کار مشخص می‌کند که پس از تکمیل موفق یک گام چه اتفاقی می‌افتد.

شیء steps فقط برای تأیید موفقیت نیست؛ متغیرهای خروجی گردش کار حتی اگر خارج از پارامترها باشند هم می‌توانند منتقل شوند و به گردش کارهای دیگر یا سیستم لاگ‌گیری ارسال شوند.

آرازو (Arazzo) چگونه تجربهٔ توسعه‌دهنده را بهبود می‌دهد؟

با پیچیده‌تر شدن APIها، مستندات آن‌ها بیش از حد سنگین و دشوار برای درک می‌شود و API شکننده می‌شود زیرا وابستگی‌های مختلفی برای رسیدن به یک هدف وجود دارد. بسیاری از این رفتارها پیش از انتشار Arazzo کاملاً مستند نبودند.

اغلب بین تولیدکنندگان و مصرف‌کنندگان API فاصله وجود دارد. توسعه‌دهندگان API معمولاً مشخصهٔ خام را در فرآیند onboarding به مصرف‌کنندگان می‌دهند که معمولاً به‌هم‌ریخته و سخت‌خوان است. مستندات رسمی هم خیلی زود قدیمی می‌شوند. مشخصهٔ Arazzo هر دو مشکل را همزمان حل می‌کند و مستندات تعاملی گردش کار و خودکارسازی مستندات API را ممکن می‌سازد.

اولین مزیت Arazzo برای توسعه‌دهندگان این است که فرمت آن برایشان آشناست (بسیار شبیه OpenAPI است و اغلب کنار هم ذخیره می‌شوند).

همچنین با قابلیت sourceDescriptions می‌توان کامپوننت‌های خود را تعریف کرد که باعث می‌شود گردش کارهای API بسیار کمتر شکننده و دست‌وپاگیر باشند. این ویژگی Arazzo را برای پیاده‌سازی گردش کارهای احراز هویت عالی می‌کند. مشخصه می‌تواند هر گام را با کد وضعیت HTTP خودش توصیف کند و به مصرف‌کننده کمک کند قصد تولیدکننده را دقیقاً بفهمد (بهبود چشمگیر DX).

بزرگ‌ترین مزیت DX مربوط به مدل‌های زبانی بزرگ (LLM) است. داشتن مشخصه‌ای که دقیقاً توضیح می‌دهد هر فراخوانی API چه کاری انجام می‌دهد، درک آن را برای LLMهایی مثل ChatGPT بسیار آسان‌تر می‌کند. همان‌طور که فرانک کیل‌کامینز اخیراً گفت، در حال حاضر هوش‌های مولد در ساخت یا مصرف API حدود ۸۰-۹۰٪ موفقیت دارند و بقیه اغلب توهم (hallucination) است. افزودن مستندات گردش کار به همراه مستندات API دقت را به‌طور چشمگیری افزایش می‌دهد و حتی امکان تولید API از مشخصه با GPTهای سفارشی را فراهم می‌کند.

جمع‌بندی دربارهٔ مشخصهٔ Arazzo

مشخصهٔ Arazzo حلقهٔ گمشدهٔ ضروری بین ماشین‌خوان و انسان‌خوان بودن APIهاست. این مشخصه قول می‌دهد که جزء مهمی در کمک به توسعه‌دهندگان برای توصیف عملکرد یک API با زبان طبیعی باشد و هوش مصنوعی مثل ChatGPT بتواند API را از صفر بسازد.

آرازو (Arazzo) همچنین پتانسیل این را دارد که APIها را بسیار کمتر شکننده و ماژولارتر و چندمنظوره‌تر کند؛ چیزی که با پیچیده‌تر شدن APIها روزبه‌روز حیاتی‌تر می‌شود. در نهایت، Arazzo قول می‌دهد دنیای کاملاً جدیدی از ابزارهای قدرتمند را باز کند که نحوهٔ کار توسعه‌دهندگان با APIها را دگرگون خواهد کرد.

چرا امنیت API به نگرانی روبه‌رشد مدیران ارشد امنیت اطلاعات (CISOها) تبدیل شده است؟
چگونه پورتال‌های توسعه‌دهندگان به جلوگیری از پراکندگی API کمک می‌کنند؟

دیدگاهتان را بنویسید

سبد خرید
علاقه‌مندی‌ها
مشاهدات اخیر
دسته بندی ها