در WSO2 API Manager، Script Mediator یکی از ابزارهایی است که به شما امکان اجرای اسکریپتهای جاوا اسکریپت (JavaScript) را در جریان (flow) پردازش API میدهد. این ابزار قابلیت ایجاد انعطافپذیری بیشتر در مدیریت و پردازش درخواستها و پاسخهای API را فراهم میکند. در ادامه این مطلب با شرکت دانش بنیان پلتکو همراه باشید.
قابلیت Script Mediator
Script Mediator برای فراخوانی توابع انواع زبانهای اسکریپتنویسی مانند JavaScript، Groovy یا Ruby استفاده میشود.
Synapse (سیناپس) از Mediators (میانجی یا واسطه) هایی که در انواع زبانهای برنامهنویسی مانند جاوا اسکریپت، پایتون یا روبی پیادهسازی شدهاند، پشتیبانی میکند. دو راهکار برای تعریف واسطههای اسکریپت وجود دارد. راهکار اول استفاده از دستورات برنامه اسکریپت ذخیره شده در یک فایل جداگانه که از طریق ورودی رجیستری محلی یا راه دور به آن ارجاع داده میشود، راهکار دوم دستورات برنامه اسکریپت که به صورت inline در پیکربندی Synapse جاسازی شدهاند.
Synapseاز Apache Bean Scripting Framework برای پشتیبانی از زبان اسکریپت استفاده می کند، هر زبان اسکریپتی که توسط BSF پشتیبانی می شود میتواند برای پیاده سازی Synapse Mediator استفاده شود. با واسطه اسکریپت میتوانید یک تابع را در اسکریپت مربوطه فراخوانی کنید. با استفاده از این توابع، دسترسی به Synapse از پیش تعریف شده در یک متغیر اسکریپت به نام ‘mc‘ امکان پذیر است. این ‘mc‘ نشان دهنده پیاده سازی MessageContext با نام ScriptMessageContext.java است. ‘mc‘ شامل متدهای اضافی زیر است که میتوان با mc.methodName در اسکریپت به آنها دسترسی داشت. برای مثال:
- public Object getPayloadXML() – دریافت XML از SOAP Body payload
- public void setPayloadXML(Object payload) – تنظیم SOAP Body payload از XML
- public void addHeader(boolean mustUnderstand, Object content) – اضافه کردن یک هدر SOAP جدید به پیام
- public Object getEnvelopeXML() – دریافت نمایش XML از envelope (پاکت) کامل SOAP
- public void setTo(String reference) – این متد برای تنظیم مقداری که گیرنده پیام را مشخص میکند استفاده میشود.
- public void setFaultTo(String reference) – این متد برای تنظیم مقداری استفاده می شود که گیرنده خطاهای مربوط به پیام را مشخص می کند.
- public void setFrom(String reference) – این متد برای تنظیم مقداری که فرستنده پیام را مشخص میکند استفاده میشود.
- public void setReplyTo(String reference) – این متد برای تنظیم مقداری استفاده می شود که گیرنده پاسخ های پیام را مشخص میکند.
- public Object getPayloadJSON() – این متد JSON یک payload (بدنه) SOAP را بر میگرداند
- public void setPayloadJSON(payload) – این متد نمایش JSON یک payload را که از طریق متد getPayloadJSON() بدست میآید تنظیم میکند و آن را در متن پیام فعلی تنظیم میکند.
- public Object getProperty(name) – این متد یک ویژگی از متن پیام فعلی دریافت می کند.
- public void setProperty(key, value) – این متد برای تنظیم یک ویژگی در متن پیام فعلی استفاده میشود. مقادیر مشخصه قبلی با این روش جایگزین میشوند.
پیادهسازی Mediator با زبان اسکریپت نسبت به استفاده از انواع داخلی Synapse Mediator یا پیادهسازی یک Mediator کلاس جاوای سفارشی مزایایی دارد. Script Mediator ها انعطاف پذیری یک کلاس Mediator با دسترسی به Synapse MessageContext و SynapseEnvironment API ها را دارند. همچنین، سهولت استفاده و ماهیت پویا زبان های برنامه نویسی امکان توسعه سریع و نمونه سازی میانجی های سفارشی را فراهم می کند.
یک مزیت اضافی برخی از زبان های اسکریپت نویسی این است که آنها دارای قابلیت های بسیار ساده و ظریف دستکاری XML هستند که آنها را در محیط میانجی سیناپس بسیار قابل استفاده می کند. به عنوان مثال، JavaScript E4X یا Ruby REXML.
توجه
WSO2 Micro Integrator از موتور Rhino برای اجرای جاوا اسکریپت استفاده می کند که این موتور، اسکریپت را به متد داخل کلاس جاوا تبدیل می کند. بنابراین، هنگام پردازش حجمهای بزرگ داده JSON، طول کد باید کمتر از 65536 کاراکتر باشد، زیرا واسطه Script بار را به یک شی جاوا تبدیل میکند. با این حال، میتوانید از گزینههای جایگزین زیر برای پردازش حجمهای بزرگ داده JSON استفاده کنید.
- به همان عملکرد از طریق Class mediator(واسطه کلاس) دست یابید.
- اگر پیام اصلی شامل بخشهای تکراری است، میتوانید از Iterate mediator برای تولید یک بار نسبتاً کوچک با استفاده از آن بخشهای تکراری استفاده کنید. سپس به شما امکان می دهد از واسطه اسکریپت استفاده کنید.
- Script Mediator از Nashorn برای اجرای جاوا اسکریپت، علاوه بر موتور پیشفرض Rhino پشتیبانی میکند.
Syntax استفاده از اسکریپت
جهت مشاهده syntax برای واسطه اسکریپت با استفاده از اسکریپت درون خطی یا میانجی اسکریپت با استفاده از اسکریپت یک رجیستر، روی برگه مربوطه کلیک کنید.
- Script mediator با استفاده از اسکریپت خارج از رجیستری
<script language=“js”><![CDATA[…script source code…]]></script>
attribute key (کلید ویژگی) کلید رجیستری برای load (بارگیری) اسکریپت است.
language attribute ویژگی زبان، زبان اسکریپت کد اسکریپت را مشخص میکند (به عنوان مثال “js” برای جاوا اسکریپت، “rb” برای روبی، “groovy” برای Groovy).
function )تابع( یک ویژگی اختیاری است که نام تابع اسکریپت را برای فراخوانی تعریف می کند، اگر مشخص نشده باشد، به طور پیش فرض تابعی به نام “mediate” است. تابع یک پارامتر واحد – که Synapse MessageContext است – ارسال می شود. تابع ممکن است یک Boolean برگرداند، اگر اینطور نباشد، true در نظر گرفته می شود و واسطه اسکریپت این مقدار را بر میگرداند.
- Script mediator با استفاده از اسکریپت درون خطی
<script language=“js”><![CDATA[…script source code…]]></script>
مثال استفاده از جاوا اسکریپت در Message Mediation
پیکربندی زیر نمونهای از واسطههای درون خطی با استفاده از JavaScript/E4X است که اگر body پیام SOAP حاوی عنصری به نام symbol باشد که دارای مقدار IBM باشد، false را برمیگرداند:
<script language=“js”><![CDATA[mc.getPayloadXML()..symbol != “IBM”;]]></script>
در مثال زیر، اسکریپت با استفاده از کلید repository/conf/sample/resources/script/test.js از رجیستری بارگیری می شود. اسکریپت با JavaScript نوشته شده است. تابعی که باید فراخوانی شود testFunction است. به عنوان مثال برای test.js که در زیر نشان داده شده است.
” script language=“js >
“ key=“repository/conf/sample/resources/script/test.js
< “ function=“testFunction
script language=”js” نشان میدهد که تابع فراخوانی شده باید به زبان جاوا اسکریپت باشد. تابعی به نام testFunction که فراخوانی می شود باید به عنوان یک منبع در Registry ذخیره شود. اسکریپت میتواند مانند مثال زیر باشد
function testFunction(mc)
var symbol = mc.getPayloadXML()..*::Code.toString();
mc.setPayloadXML(
<m:getQuote xmlns:m=“http://services.samples/xsd“>
<m:request>
<m:symbol>{symbol}</m:symbol>
</m:request>
</m:getQuote>);
}
برای اطلاعات بیشتر به Script Mediator مراجعه کنید.
در کل، Script Mediator در WSO2 API Manager به توسعهدهندگان امکاناتی را برای سفارشیسازی و گسترش قابلیتهای پردازش API ارائه میدهد که میتواند در تطبیق با نیازهای خاص سازمان یا پروژه بسیار مفید باشد.
بدون دیدگاه