# فناوری جاوا > برنامه‌نویسی جاوا > سوال: کسی RESTful سرویس کار کرده؟

## petal.h

سلام بچه ها چطوری میشه از یه سری RESTful سرویس آماده به زبون جاوا توی یه سایت استفاده کرد؟ یعنی طریقه بکار گیری این سرویس ها چطوریه؟ ممنون میشم کمک کنین خیلی فوریه

----------


## cups_of_java

RESTFULL سرویس ها عمومن روی HTTP‌هستند
بنابراین شما چه در مرورگر با استفاده از Ajax و چه در محیط سرور ساید اون سایت (Php, Java, ASP, ...) با یک HTTP URL ساده اون متدی از اون سرویس رو فراخوانی میکنی و جواب رو توی Response میگیری.
از وب سرویس ها بسیار ساده ترن چون XMLی نیستن عمومن و Schema نمیخوان (JSONی هستند اکثرن)

----------


## petal.h

ممنون ولی چون قبلا با RESTful سرویس کار نکردم اینطوری متوجه نمیشم اگه منبع یا لینکی دارین لطف کنین اونا رو بذارین البته من خودم سرچ کردم ولی هرچی پیدا میکنم آموزش نوشتنشه من فقط می خوام بدونم که دقیقا چطوری میتونم از این سرویس ها استفاده کنم و فرصت زیادی هم ندارم خواهش میکنم کمک کنین خیلی حیاتیه. منظورم از نحوه استفاده اینه که کدوم متدها رو دقیقا کجا فراخونی کنم

----------


## cups_of_java

اینکه چه URLهایی رو باید فراخوانی کنید و آدرسشون چیه باید از نویسنده اون سرویس که میخواین فراخوانیش بکنید بپرسید دیگه (اگرم سرویس مشخص و دارای پروژه روی اینترنت هست که باید مستنداشو بخونید)
بقیش هم میشه یه سری درخواست HTTP احتمالن GET یا POST... که تو هر زیانی هر برنامه نویسی می تونه به سادگی بزنه.
شما که چیزی نگفتی، من فرض می کنم کلاینتت جاواست و سرویسه هم JSON باشه اونوقت میتونی یه همیچین کدی بنویسی (کد کلاس NetClientGet  رو نگاه کن)

----------


## petal.h

تا حدی متوجه منظورتون شدم، به هر حال باز هم احتمالا به کمکتون نیاز پیدا میکنم در هرصورت ممنون از راهنماییتون

----------


## petal.h

ببخشید آقای cups_of_java  یا هر کس دیگه ای که میتونه جواب سوالمو بده من هنوز متوجه نشدم که چطوری باید بدونم این متدها و کلاس ها رو کجا و در کدوم قسمت از کد بنویسم که اون سرویس تبدیل به قسمتی از برنامه من بشه؟

----------


## cups_of_java

اون سرویس تبدیل به قسمتی از برنامه شما نمیشه! اون سرویس مثل یک صفحه وب می مونه انگار! مثل وب سرویس می مونه! تاحالا با وب سرویس کار کردید؟ اگه نه، تا حالا شده یه آدرس وب رو توی برنامتون بخونید؟
شما درخواست HTTP میدید پاسخ میگیرید و اطلاعاتی که میخواین از اون سرویس توی پاسختون هست! کل این ماجرا مثل این می مونه که شما یک تابع رو فراخوانی کرده باشید و مقدار برگشتیشو گرفته باشید!

فکر می کنم شما کلن نمی دونین RESTFUL چیه و گیچ شدین! اصن چیز سخت یا عجیبی نیست!

----------


## javaphantom

> ببخشید آقای cups_of_java  یا هر کس دیگه ای که میتونه جواب سوالمو بده من هنوز متوجه نشدم که چطوری باید بدونم این متدها و کلاس ها رو کجا و در کدوم قسمت از کد بنویسم که اون سرویس تبدیل به قسمتی از برنامه من بشه؟


ببین عزیز من ، من از اول نمی خواستم وارد بشم چون کلا راهنمایی که شده از نظر من غلط هست.

شما باید اول با مفاهیم SOA یا همون Service Oriented Architecture آشنا بشی و بعد از اون مفهوم 
ُSOAP یا Simple Object Access Protocol. بعد توی اون می فهمی که ارتباط بین محیط های غیر هگمن داستانش چی هست.

اما برای این  که کمی توی باغ بیارمت یک قصه برات تعریف می کنم

فرض کن یک شرکتی اومده یک برنامه نوشته که کار حسابداری انجام می ده. حاظر و آماده مثلا با تکنولوژِِی X 

حالا شرکت شما می خواد یک برنامه بنویسه که مشتری تلفن خونشو برداره به شماره ای که شما دادید زنگ بزنه بعد شماره حسابش رو بده و شما یک پل بین اون شرکتی که برنامه حسابداری نوشته و مشتر ایجاد کنید.

برای ارتباط به اون شرکت شما نیاز به یک شماره پرت و یک پروتکل در قالب خاصی دارید. فقط کافی هست شما اینور با یک زبان یا تکنولوژی y  بیایی اون پروتکل رو در قالبی که تکنولوژی x بهت گفته و توافق کردین درست کنی و از طریق اون پرت و آدرسی که بهت داده اطلاعات رو بفرسی چون اون ور یعنی تکنولوژی X می دونه پروتکل و قالب چی هست اطلاعات برای خودش ترجمه می کنه و باقی داستان و این گونه می شه که تکنولوژی X با تکنولوژی Y ارتباط برقرار می کنه.

این عمل می تونه روی پروتکل های درون سازمانی خود شرکت ها باشه می تونه استاندارد باشه.

استاندارد همیشه انتخاب می شه تا بتونی جهان کار کنی. انتخاب استاندارد مربوط به پروتکل ارتباطی قالب اطلاعاتی خیلی کمک می کنه..

وقتی می گیم وب سرویس یعنی چی ؟

یعنی پروتکل استاندارد  انتخابی http یا https باشد اما قالب چی باشه

یکی از قالبهای استانداردی که توافق شده روش داستان jax-ws هست که بصورت xmlی این قالب تعریف شده
نوع دیگه آن REST هست که بصورت String تعریف شده. ولی چون جفتشون روی پروتکل http هستند پس کلمه web به همراشون هست و چون قرار از این طریق با client های خودشون ارتباط برقرار کنند و سرویس بدنه پس می گیم web service

هر کدوم از اینها معایب و مزایای خودشون رو دارند که بنا به نوع سرویسی که داده می شه باید از سمت سرویس دهنده مشخص کنن که داریم jax-ws کار می کنیم یا RPC کار می کنیم یا REST داریم کار می کنیم

سمت client  هم با دونستن این موضوع میاد با سرور صحبت می کنهم منتها در قالب پروتکل هایی که از سمت سرور گفته شده.

می خوای REST کار کنی؟ اصلا سمت سرور بهت REST می ده؟؟

حالا مشکل اصلیتو با دونستن این مواردی که بهت گفتم بگو؟

در مورد چیزایی که بهت اول اشاره کردم یک سرچ بکنی بد نیست

----------


## petal.h

ببینید من کار وب انجام نمیدم و تا حالا با وب سرویس ها سروکار نداشتم و به خاطر همین هم مفهوم چیزهایی که میگید رو کاملا متوجه نمیشم البته نه اینکه هیچی متوجه نشم خودم هم یه سری مطالب خوندم این هم فقط یه پروژه ست که به من خورده و من علیرغم میلم مجبورم انجامش بدم و وقت زیادی هم ندارم مساله اینه: من یه cms دارم که باید یه سری RESTful سرویس رو بهش اضافه کنم که فرمت داده های خروجی هم RDF هست یعنی من باید بتونم از طریق این cms به این سرویس ها دسترسی داشته باشم و از خروجی اونها در این cms استفاده کنم حالا اینجا دو تا مشکل وجود داره: اول اینکه من نمیدونم چطوری باید از این وب سرویس ها از طریق این cms استفاده کنم و دوم اینکه با خروجی هایی که با فرمت RDF به من تحویل داده میشن چیکار کنم؟ آقای cups_of_java میگن سرویس رو صدا میکنی و خروجی رو تحویل میگیری من این کارو انجام دادم ولی تا جایی که من متوجه شدم داده هایی که با فرمت RDF ذخیره میشن واسه استفاده خود سیستم هستن نه اینکه من و شما اونها رو ببینیم حالا قسمت دوم مشکل رو میذارم واسه بعد از اینکه تونستم از سرویس ها توی این cms استفاده کنم فعلا دارم روی قسمت اول کار میکنم و شما هم اگه کمکم کنین خیلی خیلی ممنون میشم چون زیاد وقت ندارم که تمام مباحث مربوط به این کارو بخونم

----------


## cups_of_java

ببین تو سوالت رو کلی پرسیدی منم کلی جوابت رو دادم. CMSت اگه با جاواست که با جاوا اون سرویس ها رو فراخوانی میکنی (همونطور که گفتم دیگه) بعدش RDF میگیری! خب این تا اینجای قضیه که درسته!
RDF یه فرمت مبتنی بر XML هستش که خوانا هستش برای انسان، کاربرد های Semanticی هم داره. حالا بستگی داره بخوای چیکارش کنی دیگه!!!؟ چیکارش میخوای بکنی؟ این که دیگه به RESTFUL سرویس صدا زدن ربطی نداره.

----------


## cups_of_java

> یکی از قالبهای استانداردی که توافق شده روش داستان jax-ws هست که بصورت xmlی این قالب تعریف شده
> نوع دیگه آن REST هست که بصورت String تعریف شده


تعریف Rest دقیقن این نیست، ما می تونیم وب سرویس Rest هم داشته باشیم. REST بودن یعنی اینکه چندتا اصل رو رعایت کنه. این اصل ها رو می تونید  اینجا بخونید

----------


## petal.h

خب من این چیزایی که گفتین رو بررسی میکنم جواب اینکه میخوام با این سرویس ها چیکار کنم رو هم بعد از اینکه بررسی دقیق تری کردم بهتون میدم، ممنون از لطفتون

----------


## javaphantom

> تعریف Rest دقیقن این نیست، ما می تونیم وب سرویس Rest هم داشته باشیم. REST بودن یعنی اینکه چندتا اصل رو رعایت کنه. این اصل ها رو می تونید  اینجا بخونید


منهم ادعایی نداشتم که تعریف REST دقیقا یا تحقیقا این است. من احساس کردم مشکل کسی که داره سوال می کنه کلا در فهم webservice ها هست و کلا علت اینکه سراغ وب سرویس می ریم برای چی هست.

----------


## javaphantom

> من یه cms دارم که باید یه سری RESTful سرویس رو بهش اضافه کنم که فرمت داده های خروجی هم RDF هست یعنی من باید بتونم از طریق این cms به این سرویس ها دسترسی داشته باشم


آخرش من هنوز نفهمیدم باید سرویس بنویسی  یا سرویس نوشته شده رو صدا کنی ؟؟




> آقای cups_of_java میگن سرویس رو صدا میکنی و خروجی رو تحویل میگیری من این کارو انجام دادم ولی تا جایی که من متوجه شدم داده هایی که با فرمت RDF ذخیره میشن واسه استفاده خود سیستم هستن نه اینکه من و شما اونها رو ببینیم


پس سیستم رو درست تحلیل نکردی یا نکردن. یک سرویسی هست که خروجی اون x هست. شما صداش کردی اونم x رو تحویل داده. حالا شما می گی این x برای خودش معنی می ده نه برای من.!!!!!!!!! خوب سرویس دیگری رو صدا کنید که x نده.

----------


## petal.h

> آخرش من هنوز نفهمیدم باید سرویس بنویسی  یا سرویس نوشته شده رو صدا کنی ؟؟.


من فقط باید سرویس ها رو صدا کنم

----------


## cups_of_java

لینکی که دادی رو دیدم، چیز عجیبی نیست. دقیقن همونیه که گفتم.
این سرویس ها میان محتوا رو از شما میگیرن و بعد به طور سمنتیک طبقه بندیش میکنن و به شما RDF میدن. اینکه میخوای با اون RDF ها چیکار کنی و چطور توی CMSت استفادشون کنی به خودت مربوط. اما تا اینجای کار
تو یه سری محتوا رو از توی CMSات در میاری (مثل یه تکست یه سند یه عکس...) بعد اون رو توی Body Dataی یک Post میزاری و یه سری هدر مربوط به اون درخواست رو ست میکنی و فراخوانیش میکنی اونم بهت خروجی میده، خروجیهاشم فرمت های مختلف داره هر کدوم بیشتر به کارت میاد می تونی از همون استفاده کنی...
مثلن اینجا رو ببین:
این یه سرویسش به اسم enhacer هستش.

برای هر سرویس توضیح داده که چیکار میکنه و دقیقن درخواست Httpی که باید درست کنی رو هم مثال زده! 
دیگه اگه تو این چیزاش مشکل داری کمی مطالعه کن و بگرد دستت میاد

----------

