برنامه نویسی

نگاشت خروجی AWS State Machine به پاسخ API Gateway با VTL

این ادامه مقاله قبلی است که در مورد گردش‌های کاری کد صفر که کاربران Cognito با توابع Step ایجاد می‌کنند نوشتم. بخشی از استفاده از State Machines با API Gateway مربوط به پاسخ و نقشه برداری بالقوه VTL است.

اهداف این مقاله مستندسازی برخی از نکات و چیزهایی است که در طول مسیر به آنها دست یافتم.

آیا شکست موفقیت است؟

من می‌خواستم بتوانم یک ماشین حالت نشان دهد که بدون توجه به اینکه کاربر Cognito ایجاد شده است یا باید به عقب بازگردانده شود، با موفقیت پردازش شده است. من تصمیم گرفتم که هر دوی آن‌ها اجرای تمیز ماشین دولتی را تضمین می‌کنند، زیرا از طریق API Gateway اجرا می‌شد. اما جایی که من گیر کردم این بود که چگونه به مشتری/تماس گیرنده برگردم که گردش کار در واقع شکست خورده و ورودی بد بود و کد وضعیت 400 BAD REQUEST مناسب بود. اینجاست که API Gateway VTL Mapping با پاسخ‌های State Machine واقعاً وارد عمل می‌شود.

موفقیت در زیر نشان داده شده است

ماشین حالت تابع مرحله ایجاد کاربر Cognitoجریان موفقیت

و حالا شکست

خرابی ماشین حالتبنابراین نگرانی من اکنون این است که چگونه به مشتری اطلاع دهم

خروجی از ماشین دولتی

اول از همه در مورد موفقیت، من خروجی را به این صورت برمی گردم

{
  "response": {
    "statusCode": 200,
    "body": {
      "firstName": "Sample",
      "lastName": "User",
      "emailAddress": "sample@user.com",
      "userId": "1000125"
    }
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

همانطور که می بینید، این یک شی کاملا کامل است که ورودی آن از درخواست API Gateway ارائه شده است. علاوه بر این، حاوی آنچه من واقعاً می‌خواهم است، شناسه کاربر تولید شده خودکار است. من قصد دارم از آن در مشتری خود استفاده کنم

دوم، شکست

{
  "response": {
    "message": "error creating user",
    "statusCode": 400
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

API Gateway VTL Mapping State State پاسخ ماشین؟

با API Gateway می‌توانید نقشه‌برداری درخواست ورودی و همچنین نگاشت پاسخ خروجی را انجام دهید. مقالاتی که هنگام کار روی این موضوع از آنها یاد گرفتم

خروجی خام از State Machine من در واقع جزئیات بسیار بیشتری در مورد اجرا دارد، مانند زمان صورتحساب، شناسه اجرا، ورودی ها و خروجی ها. برای این
به عنوان مثال من به خروجی ها علاقه مند هستم اما می توانید از شناسه اجرا برای اشکال زدایی و ردیابی نیز استفاده کنید

با VTL می توانم خروجی را به این صورت انتخاب کنم

#set ($parsedPayload = $util.parseJson($input.path('$.output')))
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حالا من یک متغیر به نام دارم $parsedPayload که یک شی JSON را نگه می دارد که می توانم از طریق JSONPath پرس و جو کنم

از طریق آن مکانیسم همراه با VTL، زمانی که دستگاه حالت به من می‌گوید، کد وضعیت پاسخ را به 400 BAD REQUEST لغو می‌کنم و زمانی که موفقیت آمیز بود، فقط خروجی مربوط به کاربر را برمی‌گردانم.

#if($parsedPayload.response.statusCode == 400)
#set($context.responseOverride.status = 400)
{
    "message": "$parsedPayload.response.message"
}
#else
{
    "firstName": "$parsedPayload.response.body.firstName",
    "lastName": "$parsedPayload.response.body.lastName",
    "emailAddress": "$parsedPayload.response.body.emailAddress",
    "userId": "$parsedPayload.response.body.userId"
}
#end
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بسته شدن

ادامه با موضوع فشار دادن کد و رفتار به زیرساخت، مالکیت عملیات را بر روی Cloud Provider قرار می دهد. در این مورد، AWS. با انجام این کار، من فقط زمانی را صرف نوشتن کدهایی می‌کنم که باید بنویسم و ​​زمان کمتری را صرف نگرانی/مدیریت کد/عملیات‌هایی می‌کنم که AWS می‌تواند برای من اجرا کند. استفاده از نگاشت VTL API Gateway با پاسخ‌های State Machine به دستیابی به آن کمک می‌کند.

با استفاده از توابع Step، توابع ذاتی، API Gateway با VTL و JSONPath، بدون نیاز به نوشتن کد، راه حلی بسیار مقیاس پذیر و قوی دریافت می کنید.

نوشته های مشابه

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا