Web
Http چیست؟
پروتکل HTTP
مخفف عبارت Hyper Text Transfer Protocol
است و به ارتباط میان سرویسدهنده (server)
و سرویسگیرنده (client)
در وب میپردازد.
ارتباط بین clientها و serverها از طریق ارسال درخواستهای http و دریافت پاسخهای http انجام میشود. به زبان سادهتر، http یک نوع قانون است که ارسال و دریافت اطلاعات بین client و server بر اساس آن انجام میشود.
برای آشنایی بهتر با Http میتوانید از لینکهای زیر کمک بگیرید:
RESTful Api
API
یا Application Programming Interface
(که به رابط برنامهنویسی کاربردی ترجمه میشود) مجموعهای از قواعد و مکانیزمها است که از طریق آن نرمافزارها و یا کامپوننتهای مختلف یک برنامه با همدیگر ارتباط برقرار میکنند. منظور از رابط چیزی است که دو شئ یا دو موجودیت مختلف را به همدیگر ربط میدهد. API
میتواند دادههایی که شما برای نرمافزارتان نیاز دارید را از طریق یک فرمت مناسب به خروجی بفرستد و یا آن را برگشت دهد. فرمت JSON
و XML
از این دست فرمتها هستند. در این مطلب ما قصد داریم روی JSON
تمرکز کنیم.
برای آشنایی بیشتر با RESTful api
لینکهای زیر را مطالعه کنید.
Spring boot
برای شروع یادگیری Spring پیشنهاد میکنیم به طور گام به گام با تلفیق مطالب موجود در مستندات و ویدیو آموزشی پیش بروید. در ادامه، به صورت قسمتبندی شده به توضیحات بیشتر در خصوص مطالب ویدیو خواهیم پرداخت.
در این ویدیو، آموزشدهنده به ساخت یک برنامه برای آپلود و دانلود تصاویر میپردازد. سعی کنید با این نگاه که قرار است یک file server (موجودی شبیه به google drive) بسازید با مسئله برخورد کنید و ببینید برای این کار چه نیازمندیهایی خواهیم داشت. البته توجه کنید که در نهایت، قرار نیست این پروژه از شما تحویل گرفته شود و هدف اصلی، آموزش و یادگیری spring boot است. اما برای آشنایی با ابعاد دیگر و نکات مهم آن خوب است فراتر از ویدیو آموزشی فکر کنید تا با چالشهای جدیدی روبهرو شوید.
ایجاد تمپلیت اولیه: تا دقیقه ۶
برای شروع کافیست وارد وبسایت start.spring.io شوید و با مشخص کردن تنظیمات پروژه خود، و همچنین انتخاب افزونه Web، پروژه اولیه را generate کنید. با این کار، یک پروژه اولیه شامل dependency های لازم برای استفاده از spring boot برای شما ایجاد خواهد شد.
توجه کنید که در اینجا تمرکز اصلی ما روی مباحث مربوط به REST است، و در نتیجه نیازی به قسمت مربوط به دیتابیس نخواهیم داشت. اما توصیه میشود مشابه ویدیو آموزشی، این قسمت از کار را نیز پیادهسازی کنید.
بررسی ساختار پروژه اولیه: تا دقیقه ۱۱
یکی از بخشهای مهم در ساختار یک پروژه Spring Boot، فایل .properties
است که تنظیمات کلی برنامه را شامل میشود. در ابتدای ساخت پروژه این فایل خالی است و spring boot، از مقادیر پیشفرض خود برای مصارف مختلف استفاده میکند. به طور مثال، چنانچه پروژه را اجرا کرده باشید خواهید دید که اپلیکیشن روی پورت 8080 بالا خواهد آمد. میتوانید با افزودن عبارت server.port = 8081
این مقدار را تغییر دهید.
در این لینک میتوانید بیشتر با این موضوع و امکانات آن آشنا شوید.
در ادامه بیشتر به این موضوع خواهیم پرداخت و نمونههای دیگری از کاربرد آن را در اتصال به پایگاه داده خواهیم دید.
ساخت کنترلر: تا دقیقه ۱۴
در این قسمت به پیادهسازی یک RestController ساده میپردازیم. درخواستهای رسیده به سایت یا Web Application
توسط کنترلرها پاسخ داده میشوند. به طور معمول، این کنترلرها را در پکیج controller
قرار میدهیم.
برای آشنایی بیشتر با مفهوم controller، قسمت 5.1 از این مقاله را تا ابتدای 5.1.1 Action Methods
مطالعه کنید.
توابع موجود در کنترلرها به نوعی API برنامه ما به دنیای بیرون محسوب میشوند. به این متودها به اصطلاح handler methods
گفته میشود.
به عنوان تمرین، یک handler method بنویسید تا چنانچه وارد آدرس localhost:<port>/dice
شدیم، یک عدد صحیح رندوم از ۱ تا ۶ بازگرداند.
برای ارسال درخواست GET، میتوانید از دستور curl
نیز در terminal خود استفاده کنید:
curl http://localhost:8080/dice
ساخت هندلر دریافت تصاویر: تا دقیقه ۲۲
یکی از نیازمندیهای مهم در ساخت یک وبسرویس، دریافت اطلاعات ورودی (پارامتر) از سمت کلاینت است. هندلر متودهایی که تا به حال پیادهسازی کردیم، فاقد پارامتر ورودی بودند، در این قسمت، به بررسی نمونهای از درخواستها که دارای پارامتر هستند میپردازیم. به طور کلی به ۳ روش میتوان این اطلاعات را منتقل کرد:
- PathVariable
- RequestBody
- RequestParam
برای آشنایی بیشتر با جزییات و نکات @PathVariable
توصیه میشود این لینک را مطالعه کنید.
همچنین جهت درک تفاوت PathVariable
با RequestParam
خوب است لینک زیر را مطالعه کنید.
HttpStatus
در این لینک میتوانید لیستی از آنها را ببینید.
Delete, Put, Post: تا دقیقه ۳۰
تا کنون درخواستهای خود را به کمک مرورگر و یا دستور curl
ارسال میکردیم. در این قسمت اما نیاز به امکانات بیشتری داریم تا بتوانیم از دستوراتی مثل post و delete نیز استفاده کنیم.
یکی از این روشها استفاده از همان روش curl
است. در لینکهای زیر میتوانید نحوه استفاده از آن را ببینید: (همان خطوط اولیه برای یادگیری نحوه استفاده از آنها کافیست)
روش مرسوم دیگر، استفاده از اپلیکیشنهای تردپارتی مثل Postman است. در همین فاز به طور مجزا به آموزش این ابزار پرداختهایم، میتوانید با مراجعه به آن بخش، از چگونگی استفاده از آن آگاه شوید. در انتهای لینک زیر نیز میتوانید نمونهای از استفاده آن را برای انواع درخواستها مشاهده کنید.
Validation
یکی از نکات مهم هنگام دریافت درخواستها، اعتبارسنجی یا همان Validation
درخواست است، به این معنا که اطلاعات ارسال شده، شروط تعیین شده توسط سرور را ارضا کنند. برای آشنایی بیشتر با انواع شروط و امکانات آن میتوانید این لینک را مطالعه کنید.
آپلود فایل: تا دقیقه ۴۱
در قسمتهای مختلف یک پروژه ممکن است لازم شود تا آبجکتهای خود را به Json تبدیل کنید و یا برعکس، یک Json را به آبجکت. یکی از کتابخانههای معروف در این زمینه، کتابخانه Jackson است. هرچند spring boot به طور خودکار از این کتابخانه بهره میگیرد اما خوب است با آن آشنا شوید تا در صورت نیاز، در قسمتهای دیگر از امکانات آن استفاده کنید.
دانلود فایل: تا دقیقه ۵۸
یکی از مفاهیم مهم در مهندسی نرمافزار، مسئله IOC یا Inversion Of Control (وارونگی کنترل) است. تزریق وابستگی یا Dependency Injection یک الگوی پیادهسازی IoC است. به این صورت که اسمبلر به جای خود اشیاء مسئولیت دخیل کردن شیئی به شیء دیگر را برعهده میگیرد. در این لینکها میتوانید بیشتر با این مفهوم و نحوه استفاده از آن آشنا شوید: (در این مرحله نیازی به درگیری با جزییات آن نیست. سعی کنید بخشهای اصلی مقاله را مطالعه کنید)
Component
پیش از ادامه مشاهده ویدئو خوب است با مفهوم component آشنا شویم:
در فازهای گذشته با برخی از الگوهای طراحی از جمله Singleton آشنا شدیم. برخی اشیاء در Spring Boot میبایست به صورت Singleton
طراحی شوند زیرا تنها و تنها به یک عدد از آنها در کل برنامه نیاز است. به صورت اجمالی انواعی از آن به صورت زیر است:
Controller / RestController: برای مدیریت درخواستهای دریافتی به سمت وبسرویس استفاده میشود. شما یک نگاشت (Mapping) برای هر درخواست درنظر میگیرید و خود کنترلر هنگام دریافت درخواست، آن را با تابع مناسب تطبیق می دهد.
Service: کلاسی است که منطق برنامه را پشتیبانی میکند. برای مثال درخواستی به کنترلر میآید و سپس کنترلر آن را به یک سرویس پاس میدهد و پس از مدیریت درخواست، پاسخ به کنترلر بازمیگردد و کنترلر آن را به کاربر خروجی میدهد.
Repository: یک واسط برای ارتباط با پایگاه داده است. به این صورت که شما با تنظیمات ثبت شده در application.properties عملا پارامترهای مورد نیاز اتصال به پایگاه داده را تعیین کرده و با کمک Repository روی آن کوئری میزنید. به عبارتی زحمت نوشتن کوئریهای خام sql و یا درگیری با JDBC از دوش شما برداشته میشود. این Component تنها و تنها با Service در ارتباط است. در صورتی که این توالی را به درستی درک نکردهاید نگران نباشید! (البته که نگران باشید، اما برید اصلاحش کنید :) همچنین Repositoryها برای ذخیرهی Entityها به کار میروند که در حقیقت اشیاء حقیقی برنامه هستند. برای درک بیشتر مفهوم Entity میتوانید از این لینک کمک بگیرید.
Configuration: پیش از این با فایل
application.properties
آشنا شدید. تصور کنید بخواهیم از تنظیمات تعیین شده در این فایل، در قسمتهایی از برنامه خود استفاده کنیم. پیشتر به یکی از روشهای اینکار که استفاده از@Value
بود اشاره شد، اما این روش محدودیتهایی دارد. در مقابل، استفاده از کلاسهای Configuration روش مرسومی است که پاسخگویی بسیاری از نیازهایمان خواهد بود. در این باره میتوانید این لینک را مطالعه کنید.
استفاده از پایگاه داده h2: تا ۱:۱۴
بدون شرح :|
دیپلوی
یکی از نیازمندیهای مهم در طول اجرای یک وبسرویس، امکان مشاهده برخی اطلاعات در قسمتهای مهم سرور است. برای این منظور، شما میتوانید برنامه را در حالت debug اجرا کنید، اما این راه چندان جذاب نیست! روش جایگزین، استفاده از log است. به این صورت که در قسمتهای مورد نیاز، بسته به کاربرد، بخشی از اطلاعات لازم را لاگ بیندازید. در اینجا میتوانید درباره نحوه استفاده از logger در spring boot مطالعه کنید.
Postman
ابزاری بسیار سبک بر مبنای وب است که از آن برای تست کردن سایر API ها استفاده می شود. کاربرد این ابزار زمانی مشهود است که برنامه نویس قبل از استفاده از یک مدل API آن را با Postman بررسی کند. درخواستهای API (حتی درخواستهای پیچیده) را میتوان با Postman به راحتی ایجاد کرد و جواب آنها را به شکلها و فرمتهای مختلف در مرورگر دریافت نمود. همین کارایی باعث میشود که برنامهنویس بداند API مورد نظرش چگونه رفتار می کند و در تصمیمگیری برای استفاده از آن راحتتر باشد.
برای نصب این نرمافزار میتوانید آن را از سایت رسمی Postman دانلود کنید.
برای آشنایی بیشتر با این نرمافزار میتوانید Postman Tutorial for Beginners with API Testing Example را مطالعه کنید.