پرش به مطلب اصلی

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 تمرکز کنیم.

api schema

برای آشنایی بیشتر با RESTful api لینک‌های زیر را مطالعه کنید.

Spring boot

برای شروع یادگیری Spring پیشنهاد می‌کنیم به طور گام به گام با تلفیق مطالب موجود در مستندات و ویدیو آموزشی پیش بروید. در ادامه، به صورت قسمت‌بندی شده به توضیحات بیشتر در خصوص مطالب ویدیو خواهیم پرداخت.

info

در این ویدیو، آموزش‌دهنده به ساخت یک برنامه برای آپلود و دانلود تصاویر می‌پردازد. سعی کنید با این نگاه که قرار است یک file server (موجودی شبیه به google drive) بسازید با مسئله برخورد کنید و ببینید برای این کار چه نیاز‌مندی‌هایی خواهیم داشت. البته توجه کنید که در نهایت، قرار نیست این پروژه از شما تحویل گرفته شود و هدف اصلی، آموزش و یادگیری spring boot است. اما برای آشنایی با ابعاد دیگر و نکات مهم آن خوب است فراتر از ویدیو‌ آموزشی فکر کنید تا با چالش‌های جدیدی روبه‌رو شوید.

ایجاد تمپلیت اولیه: تا دقیقه ۶

برای شروع کافیست وارد وبسایت start.spring.io شوید و با مشخص کردن تنظیمات پروژه خود، و همچنین انتخاب افزونه Web، پروژه اولیه را generate کنید. با این کار، یک پروژه اولیه شامل dependency های لازم برای استفاده از spring boot برای شما ایجاد خواهد شد.

info

توجه کنید که در اینجا تمرکز اصلی ما روی مباحث مربوط به REST است، و در نتیجه نیازی به قسمت مربوط به دیتابیس نخواهیم داشت. اما توصیه می‌شود مشابه ویدیو‌ آموزشی، این قسمت از کار را نیز پیاده‌سازی کنید.

بررسی ساختار پروژه اولیه: تا دقیقه ۱۱

یکی از بخش‌های مهم در ساختار یک پروژه Spring Boot، فایل .properties است که تنظیمات کلی برنامه را شامل می‌شود. در ابتدای ساخت پروژه این فایل خالی است و spring boot، از مقادیر پیش‌فرض خود برای مصارف مختلف استفاده می‌کند. به طور مثال، چنانچه پروژه را اجرا کرده باشید خواهید دید که اپلیکیشن روی پورت 8080 بالا خواهد آمد. می‌توانید با افزودن عبارت server.port = 8081 این مقدار را تغییر دهید.

tip

در این لینک می‌توانید بیشتر با این موضوع و امکانات آن آشنا شوید.

در ادامه بیشتر به این موضوع خواهیم پرداخت و نمونه‌‌های دیگری از کاربرد آن را در اتصال به پایگاه داده خواهیم دید.

ساخت کنترلر: تا دقیقه ۱۴

در این قسمت به پیاده‌سازی یک RestController ساده می‌پردازیم. درخواست‌های رسیده به سایت یا Web Application توسط کنترلرها پاسخ داده می‌شوند. به طور معمول، این کنترلر‌ها را در پکیج controller قرار می‌دهیم.

tip

برای آشنایی بیشتر با مفهوم controller، قسمت 5.1 از این مقاله را تا ابتدای 5.1.1 Action Methods مطالعه کنید.

توابع موجود در کنترلر‌ها به نوعی API برنامه ما به دنیای بیرون محسوب می‌شوند. به این متود‌ها به اصطلاح handler methods گفته می‌شود.

info

به عنوان تمرین، یک handler method بنویسید تا چنانچه وارد آدرس localhost:<port>/dice شدیم، یک عدد صحیح رندوم از ۱ تا ۶ بازگرداند.

tip

برای ارسال درخواست GET، می‌توانید از دستور curl نیز در terminal خود استفاده کنید:

curl http://localhost:8080/dice

ساخت هندلر دریافت تصاویر: تا دقیقه ۲۲

یکی از نیازمندی‌های مهم در ساخت یک وب‌سرویس، دریافت اطلاعات ورودی (پارامتر) از سمت کلاینت است. هندلر متود‌هایی که تا به حال پیاده‌سازی کردیم، فاقد پارامتر ورودی بودند، در این قسمت، به بررسی نمونه‌ای از درخواست‌ها که دارای پارامتر هستند می‌پردازیم. به طور کلی به ۳ روش می‌توان این اطلاعات را منتقل کرد:

  • PathVariable
  • RequestBody
  • RequestParam
tip

برای آشنایی بیشتر با جزییات و نکات @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 را مطالعه کنید.