خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

چگونه با Spring Boot یک REST API ایجاد کنیم

با Spring Boot به سرعت یک API راه اندازی و اجرا کنید.

مخفف REST مخفف REpresentational State Transfer است، در حالی که API مخفف Application Programming Interface است. آنها با هم به یک REST API اشاره می کنند. REST API سرویسی است که درخواست‌ها و پاسخ‌ها را بین دو سیستم نرم‌افزاری بر اساس معماری REST منتقل می‌کند.

معماری REST خدمات وب را ایجاد می کند که از طریق URL ها با استفاده از یکی از چهار فعل درخواستی قابل دسترسی هستند: POST، GET، PUT و DELETE. بنابراین، می‌توانید بگویید REST API نرم‌افزاری است که به شما امکان می‌دهد منابع را از طریق URL ایجاد، بخوانید، به‌روزرسانی و حذف کنید.

می توانید یاد بگیرید که چگونه با استفاده از Spring Boot یک REST API ایجاد کنید.

راه اندازی برنامه Spring Boot

اولین کاری که باید انجام دهید این است که با اصول اولیه Spring آشنا شوید و یک برنامه Spring Boot راه اندازی کنید. با این حال، باید وابستگی ها را تغییر دهید. علاوه بر وابستگی به وب، باید وابستگی Spring Data Java Persistent API (JPA) و درایور پایگاه داده ای را که قصد استفاده از آن را دارید دریافت کنید (این برنامه از MySQL استفاده می کند).

برای این API REST، به یک کنترلر، یک مدل و یک مخزن نیاز دارید. بنابراین، REST API ساختار فایل زیر را خواهد داشت:

ساختار فایل REST API

ایجاد مدل

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

package com.onlineshopaholics.api.model;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;

@Table(name="customer")
@Entity
public class Customer {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @Column(name="customername")
    private String name;

    private String email;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

از کلاس مشتری بالا، خواهید دید که هر مشتری یک شناسه، نام و ایمیل خواهد داشت. همچنین چندین حاشیه نویسی را مشاهده خواهید کرد که اهداف مختلفی را دنبال می کنند.

  • @Entity: کلاس مشتری را به عنوان یک موجودیت JPA اعلام می کند. این بدان معنی است که JPA از فیلدهای کلاس برای ایجاد ستون در یک پایگاه داده رابطه ای استفاده می کند.
  • @Table: نام جدولی را مشخص می کند که به کلاس مدل مشتری نگاشت می شود.
  • @Id: خاصیتی را مشخص می کند که موجودیت موجود در پایگاه داده را به طور منحصر به فرد شناسایی می کند.
  • @GeneratedValue و @GenerationType: اینها با هم کار می کنند تا یک استراتژی تولید خودکار را برای زمینه ای که با آن مرتبط است مشخص کنند. بنابراین، فیلد id به طور خودکار هر بار که مشتری جدیدی ایجاد می کنید، یک مقدار منحصر به فرد ایجاد می کند.
  • @Column: خاصیتی را مشخص می کند که به ستونی در پایگاه داده نگاشت می شود. بنابراین، ویژگی name به ستون نام مشتری در پایگاه داده نگاشت می شود.
مطلب مرتبط:   نحوه به روز رسانی پارامترهای کوئری در React

ایجاد مخزن

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

package com.onlineshopaholics.api.repository;

import org.springframework.data.repository.CrudRepository;
import com.onlineshopaholics.api.model.Customer;

public interface CustomerRepository extends CrudRepository<Customer, Integer>{}

مخزن مشتری رابط Spring’s CrudRepositoy را گسترش می دهد و کلاس مدل مشتری را به همراه نوع شناسه منحصر به فرد موجودیت یعنی Integer ارسال می کند.

رابط CrudRepository دسترسی به بیش از 10 عملیات، از جمله روش‌های عمومی CRUD را که برای REST API نیاز دارید، فراهم می‌کند. بنابراین، از آنجایی که CrudRepository قبلاً روش‌هایی را که شما نیاز دارید تعریف می‌کند، نیازی به اعلام صریح آنها در رابط CustomerRepository نیست.

ایجاد کنترلر

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

package com.onlineshopaholics.api.controller;

import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.onlineshopaholics.api.model.Customer;
import com.onlineshopaholics.api.repository.CustomerRepository;

@RestController
@RequestMapping("/customers")
public class CustomerController {
    @Autowired
    private CustomerRepository customerRepository;

    // create new customer
    @PostMapping("/add")
    public Customer addNewCustomer(@RequestBody Customer newCustomer){
        Customer user = new Customer();
        user.setName(newCustomer.getName());
        user.setEmail(newCustomer.getEmail());
        customerRepository.save(user);
        return user;
    }

    // view all customers
    @GetMapping("view/all")
    public @ResponseBody Iterable<Customer> getAllCustomers(){
        return customerRepository.findAll();
    }

    // view specific customer
    @GetMapping("view/{id}")
    public Optional<Customer> getCustomer(@PathVariable Integer id) {
        return customerRepository.findById(id);
    }

    // update an existing customer
    @PutMapping("/edit/{id}")
    public String update( @RequestBody Customer updateCustomer, @PathVariable Integer id) {
        return customerRepository.findById(id)
                 .map(customer -> {
                       customer.setName(updateCustomer.getName());
                       customer.setEmail(updateCustomer.getEmail());
                       customerRepository.save(customer);
                       return "Customer details have been successfully updated!";
                 }).orElseGet(() -> {
                       return "This customer doesn't exist";
                 });
    }

    // delete customer
    @DeleteMapping("delete/{id}")
    public String delete(@PathVariable("id")Integer id) {
        customerRepository.deleteById(id);
        return "Customer has been successfully deleted!";
    }
}

کنترلر فوق با استفاده از پنج روش رابط CrudRepository (هر کدام به روش خاصی اختصاص داده شده است) REST API را به عملیات CRUD مجهز می کند. کنترلر همچنین از چندین حاشیه نویسی مهم Spring استفاده می کند که به آن اجازه می دهد عملکردهای خود را انجام دهد.

  • @RestController: این حاشیه نویسی دو هدف را دنبال می کند. یک کلاس را برای کشف با اسکن مؤلفه مشخص می کند. همچنین به Spring می گوید که مقدار بازگشتی را برای همه متدها در این کلاس در بدنه پاسخ بنویسد.
  • @RequestMapping: الگوی درخواست خط پایه را که کنترلر انجام خواهد داد، تعریف می کند. بنابراین، این کنترلر تمام درخواست های “/customers” را رسیدگی می کند.
  • @ResponseBody: به یک روش اجازه می‌دهد یک موجودیت کامل را برگرداند.
  • @RequestBody: به شما امکان می دهد بدنه درخواست را به یک شی تبدیل کنید.
  • @RequestParam: به شما امکان می دهد یک ویژگی را از یک شی جدا کنید.
  • @PathVariable: به شما امکان می‌دهد یک مقدار درخواست را به یک مکان‌نما نگاشت کنید. شناسه داده شده به متد حذف را با یک مقدار موجود در پایگاه داده نگاشت می کند.
  • @PostMapping: به شما امکان می دهد منابع ایجاد کنید.
  • @GetMapping: به شما امکان می‌دهد داده‌های منبع را بخوانید.
  • @PutMapping: به شما امکان می دهد منابع را به روز کنید.
  • @DeleteMapping: به شما امکان می دهد منابع را حذف کنید.
مطلب مرتبط:   معرفی Freenginx، فورکی از محبوب ترین وب سرور

اتصال پایگاه داده به برنامه شما

برای اتصال پایگاه داده به هر برنامه Spring، باید از فایل application.properties در پوشه منابع استفاده کنید. این فایل در ابتدا خالی است، بنابراین می توانید آن را با ویژگی های مناسب برای پایگاه داده ای که قصد استفاده از آن را دارید پر کنید. این برنامه از یک پایگاه داده MySQL استفاده می کند، بنابراین، فایل application.properties حاوی داده های زیر خواهد بود:

spring.jpa.hibernate.ddl-auto=update
spring.jpa.open-in-view=false
spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/onlineshopaholics
spring.datasource.username=root
spring.datasource.password=securepw
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

داده های بالا نشان می دهد که این برنامه به یک پایگاه داده MySQL به نام onlineshopaholics با نام کاربری ریشه و رمز عبور “securepw” متصل می شود. قدم بعدی شما ایجاد پایگاه داده و جدول مشتری در MySQL است.

ایجاد درخواست ها

ابزارهای زیادی وجود دارد که می توانید برای تست REST API خود از آنها استفاده کنید. Postman یک ابزار محبوب تست REST API است و می توانید از آن برای آزمایش API ساده ای که ساخته اید استفاده کنید. پس از ایجاد جدول MySQL و اجرای برنامه Spring، می توانید Postman را اجرا کنید و چهار فعل درخواست را آزمایش کنید.

درخواست ارسال

این درخواست به شما امکان می دهد با استفاده از REST API مشتریان جدیدی ایجاد کنید. برای تکمیل این درخواست، باید به بخش سرصفحه درخواست پست خود بروید و یک هدر جدید (Content-Type) ایجاد کنید. شما باید مقدار این هدر را روی application/json تنظیم کنید، زیرا با استفاده از JSON مشتریان جدیدی ایجاد خواهید کرد.

هدر پست REST API

در متن درخواست، باید نوع را به خام تغییر دهید و JSON خود را وارد کنید. سپس باید URL پست را وارد کنید:

مطلب مرتبط:   دکوراتورهای پایتون: آنها چه هستند و چگونه می توانید از آنها استفاده کنید؟

بدنه پست REST API

ارسال درخواست پاسخ زیر را برمی گرداند:

پاسخ پست REST API

می بینید که درخواست موفقیت آمیز بوده و مشتری جدید نیز یک شناسه دارد.

دریافت درخواست

اکنون که مشتری دارید، می توانید آن را با درخواست دریافت که همه مشتریان را برمی گرداند، مشاهده کنید:

REST API دریافت پاسخ

یا هر مشتری با شناسه:

REST API با پاسخ ID دریافت می شود

درخواست PUT

می توانید جانت را با نام خانوادگی و ایمیل جدید به روز کنید.

پاسخ قرار داده REST API

درخواست حذف

همچنین می توانید Janet را از پایگاه داده حذف کنید.

پاسخ حذف REST API

Spring REST API خود را با استفاده از JUnit آزمایش کنید

با Spring Boot، می‌توانید هر برنامه‌ای (از جمله REST API) را با استفاده از فایل آزمایشی Spring آزمایش کنید. تست نرم افزار برای Spring Boot مهم است. هر برنامه Spring اولیه از JUnit برای آزمایش استفاده می کند و به شما امکان می دهد درخواست ها را به API های REST خود ارسال کنید.