نگاشت خروجی 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 واقعاً وارد عمل میشود.
موفقیت در زیر نشان داده شده است
جریان موفقیت
و حالا شکست
بنابراین نگرانی من اکنون این است که چگونه به مشتری اطلاع دهم
خروجی از ماشین دولتی
اول از همه در مورد موفقیت، من خروجی را به این صورت برمی گردم
{
"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، بدون نیاز به نوشتن کد، راه حلی بسیار مقیاس پذیر و قوی دریافت می کنید.