Professional Documents
Culture Documents
یک مدل معماری برای طرایح برنامه های کاربردی شبکه است.
سنن وب در حال حرکت به سمت رسوییس شدن هستند ُ بدین صورت که کالینت ها تنها از طریق امروزه برنامه های ی
های با رسور در ارتباط هستند.
وب رسویس ی
به بیان دیگر ارتباط کالینت ها با الیه داده برنامه ( )Data Modelاز طریق وب رسویس ها صورت میپذیرد.
1
در وب رسویس های Restفراهم کردن منابع برای کالینت ها بسیار مهم است در واقع تمام هدف Restاین است
که این منابع را به گونه ای در اختیار کالینت قرار دهد تا از آن ها استفاده کنند و یا تغیی یای در آن دهند و یا آن ها را
حذف کنند.
متد ها
تفاوت ز
بی وب رسویس : Rest VS Restful
ابتدا به تعریف (Representational State Transfer) RESTیم پردازیم REST .یک معماری نرمافزاری
مبتن بر پروتکل HTTPاست که پروتکیل بر اساس درخواست برای پیاده سازی APIهاست .این معماری ز
بازیای اطالعاتPUT ،
ی ( )Requestو پاسخ ( )Responseاست HTTP .از متد های پیش فرض GETبرای
رسای POST ،برای ایجاد و DELETEبرای حذف کردن منابع به کار یم رود REST .معروف ترین ز برای به روز
معماری برای تولید APIهاست .از مزایای RESTیم توان به پیادهسازی رسی عتر و توسعه ساده اشاره کرد.
ز
مکانیم ها که اپلیکیشن ها و یا کامپوننت های اپلیکیشن از طریق آن ها با هم ارتباط مجموعه ای از قواعد و
برقرار یم کنند را ) API (Application Programming Interfaceیم گویند API .داده های مورد نیاز
اپلیکیشن را از طریق فرمت ) JSON (JavaScript Object Notationکه فرمت کلید-مقدار ()key-value
2
خرویح ارسال یم کند و از این طریق توسعه اپلیکیشن را ساده تر یم کند API .جایگزین SOAPشده است
ی به
. ی
خرویح استفاده یم کرد در حقیقت APIبه اپلیکیشن ها اجازه یمدهد با که از فرمت XMLبرای ارسال
یکدیگر گفتوگو کنند.
بعد از درک کردن مفاهیم RESTو APIحال نوبت به تعریف RESTfulاست RESTful .ییک از معروفترین
ٔ
معماریهای مورد استفاده در توسعه وب رسویسها است و انعطاف بسیار زیادی را برای توسعه دهندگان به
ارمغان آورده است .در حقیقت RESTfulرا یمتوان مفرسی برای RESTدانست.
برای س ی ز
اخی وب رسویس سمت کالینت به روش زیر عمل میکنیم:
3
یز
ساخی نمایش داده شده است. برای یک وب رسویس نیاز به فانکشن زیر داریم در تصویر مراحل
برای ایجاد یک وب رسویس دریافت اطالعات به فانکشن و مقادیر زیر نیاز داریم
4
دوم برای صدا زدن یک وب رسویس نیاز به یک بدنه داریم که در تصویر زیر ییک از ساده ترین بدنه های فانکشن وب
رسویس آورده شده است که در آن هر کدام از اجزا دقیقا همان ز
معن را میدهند که از نام آن ها برداشت میشود
های که ررسکت ارئه دهنده وب رسویس در اختیار شما قرار میدهد بنا به صالح دید ی ی
تمام پارامی های باال +پارامی ی
ررسکت ارئه دهنده اختیاری هستند و میتوانند خایل باشند.
5
در مثال زیر به جای استفاده از نام کاربری و رمز عبور از توکن برای تایید صالحیت استفاده میکنیم:
میتوان به صورت جدا گانه در یک فانکشن دیگر توکن را به دست آورد و سپس در این فانکشن قرارداد.
6
7
یز
ساخی صفحه خایل یک فانکشن از نوع Call_Web_Serviceمیسازیم برای بدست آوردن اطالعات jsonاز بعد از
وب رسویس
پس از ساخت این فانکشن برای تست درست بودن فانکشن آن را در یک Selectدر محیط Toad Or Apex
یز
نوشی بدنه برای پارس کردن وب رسویس فر ز
اخوای میکنیم وسپس نتیجه را مقایسه میکنیم و بر اساس آن ررسوع به
میکنیم .ادامه کار پارس کردن در زیر آورده شده است:
در ادامه برای نمایش اطالعات پارس شده از وب رسویس نیاز به یک رسی نمایش ها در سیستم داریم.
ی
عملیای صفحه زیر را میسازیم: در صفحه
8
در تصویر باال در ریجن web_service_reportاز کالکشن مربوط به وب رسویس یک فر ز
اخوای انجام شده است
که در تصویر زیر قابل مشاهده است.
ز
اولی روش برای پارس کردن jsonما نیاز داریم که یا به صورت دیتا بییس و یا به صورت اپکیس این کار را انجام دهیم
به صورت اپکیس میباشد (در زیر آورده شده است):
آشنای با ساختار jsonکه از طرف ررسکت ارائه دهنده سیستم به ما داده شده است و پس از هر بار
ی ابتدا برای
فر ز
اخوای وب رسویس با همان فرمت برای ما اطالعات فرستاده میشود در زیر برای صدا زدن وب رسوییس که بر روی
ی
خرویح است جدول empساخته شده است با deptno = 10ما اطالعات را به صورت یک jsonکه دارای سه
دریافت میکنیم.
یز
ساخی فانکشن صدا زدن آن در باال آورده شده است را صدا ابتدا با ررسط خایص وب رسویس مورد نظر را که روش
ی
تفاوی وجود ندارد فقط در نوع عمل دکمه تغیی ایجاد میشود این بالک در ز
مینیم در داینامیک اکشن یا در پروسس
قسمت پروسس صفحه نوشته شده است :
9
در اینجا ررسیط وجود ندارد پس از صدا زدن وب رسویس نیاز به جدول مجازی( )collectionبرای نگه داری اطالعات
اخوای شده هستیم APEX_COLLECTION فر ز
گشن از وب رسویس را که در یک CLOB-VARIABLEبا نام V_CLOBذخیه کردهپس از ساخت کالکشن مقدار باز ی
ایم را با استفاده از APEX-APIزیر پارس میکنیم ( )APEX_JSONو جمع مقادیر باز ی
گشن از وب رسویس را در یک
VARIABLEبا نام V_COUNTذخیه میکنیم :
10
در بالک باال در قسمت بادی در زمان ی ز
گرفی جمع رکورد های باز ی
گشن از وب رسویس از 'P_PATH => 'ITEMS
استفاده کرده ایم دلیل این کار این است که ما برای پارس کردن یک JSONنیاز به نام برای آرایه اول داریم که در
ز
همی دلیل نایم صورت وجود از همان نام استفاده میکنیم (در JSONباال ما برای آرایه اول نام ITEMSرا داشتیم به
درصوری که نام وجود نداشته باشد با دستور زیر به آرایه ی اول JSONنام اختصاص ی به JSONاضافه نکردیم) و
میدهیم ( JSONها به دو صورت آغاز میشوند }"NAME" : "MOHAMMAD"} .1در این JSONما نایم برای
آرایه نداریم پس باید به روش زیر نایم برای JSONانتخاب کنیم تا JSONرا به فرمت مورد نظر تبدیل کنیم .1
}]"}"A":[{"ENAME":"MOHAMMADاین JSONکه ما نایم برای آن انتخاب کرده ایم اکنون میتوانیم کار پارس آن
ز
اولی آرایه میباشند ونیازی به ساخت نام وجود ندارد به را انجام دهیم .2در نوع دوم JSONها خود دارای نام برای
مانند JSONی که در مثال ها پارس شده است نام آرایه اول این JSONاین است
ستوی هم مورد استفاده خواهد بود که در ادامه ز }" .).}"ITEMS":[{"ENAME":"KINGاین نام در زمان فر ز
اخوای
می به آن اشاره شده است. یز
11
برای بدست آوردن مقدار فرستاده شده از سمت وب رسویس به صورت زیر عمل میکنیم:
>= ARRAY_NAMEنام آرایه که توسط خود وب رسویس مشخص میشد و یا ما باید برای آن نام گزاری میکردیم
ز
ستوی از JSONکه میخواهیم از درون آرایه پارس کنیم . >= COLLUMN_NAMEنام
دقت کنید که دستور باال به بزرگ و کوچک بودن حروف حساس میباشد و در صورت رعایت نکردن این امر موجب به
وجود آمدن خطا میشود(ستون فرستاده شده به COLLECTIONدارای مقدار نخواهد بود).
ز
همی فرایند تکرار میشود فقط به جای استفاده از APEX-COLLECTION برای پارس کردن در سطح دیتا بیس ز
نی
از جدول TEMPاستفاده میکنیم میتوانیم در دو بالک فانکشن و پروسیجر این کار را انجام دهیم.
.1جداول TEMPبه صورت خصویص و برای یک سشن فعال هستند و اطالعات مربوط به یک سشن را تا
قبل از COMMITدر خود ذخیه میکنند و پس از هر بار COMMITکردن جدول تمام اطالعات قبیل از
این جدول حذف شده و دیگر قابل ی
دسییس نمیباشند.
ی
.2برای استفاده از این جدول باید حتما ویژگ ذخیه اطالعات تا قبل از کامیت را در نظر گرفت.
12
در زیر نحوه ساخت این نوع جدول( )temp_tableنمایش داده شده است:
نحوه فر ز
اخوای این جدول به صورت زیر است:
13
در این تصویر ابتدا رکورد به جدول افزوده شده و سپس فر ز
اخوای شده است:
پس از فر ز
اخوای جدول باال دستور COMMITرا در سیستم اجرا میکنیم نتیجه در تصویر زیر:
14
ز
همی دلیل در این فانکشن از دستور کامیت استفاده در انتها نوع عملیات commitوابسته به ررسایط شما است به
نشده است.
15
برای ساختن وب سرویس و ارائه آن به عنوان محصول نهایی به شرکت ها نیاز به فرایند زیر داریم که در اپکس به صورت است:
wizard
درمنوی زیر گزینه وب سرویس را که با رنگ قرمز مشخص شده است انتخاب میکنیم و به صفحه زیر آن فرستاده میشویم.
سپس از این صفحه گزینه ماژول را از گزینه های سمت چپ انتخاب کنید
16
پس از انتخاب گزینه ماژول در صفحه قبلی به صفحه زیر فرستاده میشویم و در آنجا با انتخاب گزینه ساخت ماژول وارد
ساخت فرایند ساخت وب سرویس میشویم.
در قسمت ساخت ماژول نیاز به تکمیل اطلاعات زیر داریم که در تصویر هستند و در زیر تصویر توضیحات هر کدام آورده شده
است.
17
>= Module Name نام وب سرویس است و به حروف بزرگ و کوچک حساس میباشد و باید نام یکتا
باشد
Base Path >= برای مشخص کردن مبدا سرویس از این گزینه استفاده میشود به این معنا که تمام ماژول هایی که با
این نام شروع میشوند از این ماژول سرویس میگیرند.
Is Published <= مشخص میکند که این سرویس در دسترس باشد یا خیر
Pagination Size <= تعداد رکورد هایی که در هر بار فراخوانی سرویس میتوان ارسال کرد را در این آیتم مشخص
میکنیم
پس از وارد کردن اطالعات باال برروی گزینه ساخت ماژول در قسمت باالیی سمت راست تصویر کلیک میکنیم و در زیر این
ریجن یک ریجن با نام زیر برای شما نمایش داده خواهد شد
در قسمت فول یو آر ال در تصویر باال قسمت قرمز رنگ همان گزینه دوم است که در ساخت ماژول نام گزاری کردیم.
18
پس از ساختن ماژول بر روی گزینه ایجاد تمپلیت پایین سمت راست(در تصویر بالا) کلیک میکنیم و به صفحه زیرفرستاده
میشویم در این قسمت میتوانیم ورودی های سرویس را در ادامه نام تمپلیت در به مانند مثال زیر وارد کنیم مقدار دهی در
مرحله بعد است.
>=HTTP Entity Tag Type شناسه نسخه برای یک منبع برای جلو گیری از بازیابی منایع بازیابی
شده
19
پس از انتخاب گزینه ساخت هندلر به صفحه زیر فرستاده میشویم که در آن جا میتوانیم کوئری را که میخواهیم توسط وب
سرویس ارسال کنیم بسازیم و در آنجا قرار دهیم:
در قسم بالایی صفحه میتوان متد سرویس را مشخص کرد و بر اساس آن سرویس را ساخت نوع متد در نوع کوئری اثر دارد پس
در ساخت آن توجه داشته باشید.
در صورت انتخاب گزینه کوئری از نوع منبع میتوان فایل سی اس وی نیز توسط وب سرویس ارسال کرد.
در پایین صفحه در قسمت منع میتوان کوئری را بار گزاری کرد اگر در آخر کوئری ها سمیکالن قرار دهیم با خطا مواجه میشویم.
در صورت استفاده از متد هایی غیر از متد گت باید به گیرنده سرویس بگوییم که یک ساختار جی سان را بر مبنای ساختار ما
تولید کند و از طریق درخواست برای ما ارسال کند.
20
ایجاد کردیم را میتوانیم در کوئری استفاده کنیم. Template زیر ورودی هایی را که در بخش در محیط Source
برای تست وب سرویس در قسمت تمپلیت آدرس را کپی میکنیم و آن را در قسمت آدرس کروم قرار میدهیم برای این نتیجه
صحیح بگیریم نیاز داریم که اطلاعات صحیح را برای پارامتر های ورودی وارد کنیم از جدول
EMP
21
حالا برای محدود کردن دسترسی نیاز داریم که یک گروه کاربری ایجاد کنیم و یک کاربر را به این گروه متصل کنیم از مسیر زیر این
کار را انجام میدهیم.
در صفحه زیر به صفحه گروه کاربری میرویم و در آنجا یک گروه کاربری ایجاد میکنیم فقط یک گروه کاربری ایجاد میکنیم و نیازی
به دیگر گزینه ها که به صورت آپشن هستند نیاز نداریم.
پس از ایجاد گروه از منوی بالای تصویر زیر به قسمت کاربران میرویم و یک کاربر را ایجاد میکنیم
22
در این قسمت نامی را برای کاربر انتخاب میکنیم و یک ایمیل برای او قرار میدهیم
23
در قسمت پایینی صفحه برای کاربر رمز عبور را تعریف میکنیم و گروه کاربری را برای او انتخاب میکنیم
پس از ایجاد کاربر و تعیین گروه کاربری به صفحه زیر که در همان صفحه ایجاد ماژول وب سرویس است میرویم .
24
بعد از آن نیاز داریم که یک دسترسی برای کاربر بر روی وب سرویس ایجاد کنیم
برای ایجاد دسترسی نیاز داریم که یک نقش را به کابر اختصاص دهیم و در آن از نقش های موجود استفاده میکنیم
25
نقش دولوپر به این معنا است که شما با نام کاربری و رمز عبوری که در حال حاضر به سامانه وارد میشوید میتوانید از این
سرویس استفاده کنید که باید در درخواستی که برای فراخوانی این سرویس ارسال میکنید این نام کاربری و رمز عبور را نیز ارسال
کنید .در غیر این صورت با ارور زیر مواجه میشوید.
پس از انتخاب گزینه بالا میتوانید به صورت دستی برای آن رمز عبور و نام کاربری وارد کنید
و میتوانید در فانکشن فراخوانی وب سرویس در قسمت درخواست رمز عبور و نام کاربری را نیز ارسال کنید .به صورت زیر
26
تست مقدار بازگشتی از طریق فانکشن
27
برای گروه کاربری مورد نیاز خود یک نقش تعریف میکنیم و سپس دسترسی را برروی نقش ایجاد شده خودمان قرار میدهیم
تصاویر به صورت رشته ای و فرآیندی هستند.
28
نقش گروه کاربران را در این قسمت
وارد میکنیم
29
برای دسترسی به داده ها با نام کاربری و رمز عبور کاربر ایجاد شده میتوانیم این کار را انجام دهیم در این صورت باید در
فانکشنی که سرویس را فراخوانی میکند رمز عبور و نام کاربری را قرار دهیم تصویر برای مثال است و نام کاربری و رمز عبور
صحیح نیست.
برای ساخت یک وب سرویس از نوع postبه روش زیر عمل میکنیم .
30
پس از انتخاب گزینه بالا اطلاعات ماژول را وارد میکنیم و بعد از ایجاد ماژول و وراد کردن اطلاعات ماژول صفحه زیر را مشاهده
میکنیم
پس از ثبت ماژول گزینه بالا نمایش داده میشود که در این قسمت میتوان templateرا مشخص کرد و در ادامه گزینه
Url Tempalte : template/:parameter/:parameter template urlبا نمونه متن رو برو ورودی ها را مشخص کرد
31
بعد از ساخت templateگزینه بالا به ما نمایش داده میشود که در آن منبع (عملیات) و متد مورد نظر و نوع فایل و نوع
قراخوانی را مشخص میکنیم را با استفاده از دستورات sqlو گزینه های موجود انتخاب میکنیم برای مثال اگر در قسمت و
' METHOD = 'GETو در قسمت ' SOURCE TYPE = 'Queryرا انتخاب کنیم میتوانیم یک فایل .csvرا با توجه به کوئری ساخته
شده ارسال کنیم.
برای مثال در متد postنیاز به یک کوئری برای insertکردن داده ها و مقدار های ارسالی به جدول داریم یه مانند مثال زیر
در تصویر بالا urlمورد نیاز برای استفاده از این وب سرویس نیز نوشته شده است و میتوانید یک فانکشن به صورت داینامیک
و یا با مقدار ثابت برای این آدرس مقایر را ارسال کنید مثال زیر یک نمونه فانکشن از نوع استاتیک است:
32
در زمان ساخت وب سرویس از نوع POSTنیاز به یک L_BODYداریم که به صورت JSONاست و آن را در بدنه فانکشن قرار
میدهیم در تصویر زیر شما فراخوانی این فانکشن را مشاهده میکنید.
بعد از اجرای دستور بالا و مشاهده میکنید که اطلاعات مشخص شده در بدنه فانکشن در جدول ثبت شده اند .تصویر زیر:
حالا اگر بخواهیم که این ستون را در اپلیکیشن مشاهده کنیم از طریق همان وب سرویسی که در ابتدای این فایل مشاهده میکنید
فراخوانی میکنیم در تصویر زیر
33
34