التمهيد او الإقلاع الربيع بناء تطبيق على شبكة الإنترنت خدمات الويب Spring Boot Building RESTful Web Services#

التمهيد او الإقلاع الربيع بناء تطبيق  على شبكة الإنترنت خدمات الويب

 Spring Boot  Building RESTful Web Services#

التمهيد او الإقلاع الربيع بناء تطبيق  على شبكة الإنترنت خدمات الويب Spring Boot  Building RESTful Web Services#


يوفر Spring Boot دعمًا جيدًا للغاية لإنشاء RESTful Web Services لتطبيقات المؤسسات.  يوضح هذا الفصل بالتفصيل حول إنشاء خدمات RESTful على الويب باستخدام Spring Boot.

 ملاحظة - لإنشاء خدمات ويب RESTful ، نحتاج إلى إضافة تبعية Spring Boot Starter Web في ملف تكوين البنية.

 إذا كنت من مستخدمي Maven ، فاستخدم الرمز التالي لإضافة التبعية أدناه إلى ملف pom.xml الخاص بك -

   org.springframework.boot
spring-boot-starter-web
إذا كنت من مستخدمي Gradle ، فاستخدم الكود التالي لإضافة التبعية أدناه إلى ملف build.gradle الخاص بك.
compile('org.springframework.boot:spring-boot-starter-web')

رمز لملف تكوين البناء الكامل Maven build - pom.xml موضح أدناه -
xml version = "1.0" encoding = "UTF-8"?>
 xmlns = "http://maven.apache.org/POM/4.0.0" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   
   4.0.0
com.ahmedalmahallawi demo 0.0.1-SNAPSHOT jar demo Demo project for Spring Boot org.springframework.boot spring-boot-starter-parent 1.5.8.RELEASE UTF-8 UTF-8 1.8 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-maven-plugin
رمز لملف التكوين الكامل للبناء Gradle Build - build.gradle مبين أدناه -

buildscript {
   ext {
      springBootVersion = '1.5.8.RELEASE'
   }
   repositories {
      mavenCentral()
   }
   dependencies {
      classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
   }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'

group = 'com.tutorialspoint'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
   mavenCentral()
}
dependencies {
   compile('org.springframework.boot:spring-boot-starter-web')
   testCompile('org.springframework.boot:spring-boot-starter-test')
}

قبل الشروع في إنشاء خدمة ويب RESTful ، يُقترح أن يكون لديك معرفة بالتعليقات التوضيحية التالية -

 تحكم REST
 يستخدم التعليق التوضيحيRestController لتحديد خدمات RESTful على الويب.  إنه يخدم JSON و XML والاستجابة المخصصة.  يظهر بناء الجملة أدناه -
@RestController
public class ProductServiceController { 
}

طلب Mapping 
 يستخدم التعليق التوضيحيRequestMapping لتعريف URI للطلب للوصول إلى نقاط النهاية REST.  يمكننا تحديد طريقة الطلب لاستهلاك وإنتاج كائن.  طريقة الطلب الافتراضية هي GET.

@RequestMapping(value = "/products")
public ResponseEntity getProducts() { }

Request Body

يتم استخدام التعليق التوضيحيRequestBody لتحديد نوع محتوى نص الطلب.
public ResponseEntity createProduct(@RequestBody Product product) {
}

Path Variable

يتم استخدام التعليق التوضيحيPathVariable لتعريف طلب URI المخصص أو الديناميكي.  يتم تعريف متغير المسار في طلب URI على أنه أقواس مجعدة {} كما هو موضح أدناه -
public ResponseEntity updateProduct(@PathVariable("id") String id) {
}

Request Parameter

يستخدم التعليق التوضيحيRequestParam لقراءة معلمات الطلب من عنوان URL للطلب.  افتراضيا ، هو المعلمة المطلوبة.  يمكننا أيضًا تعيين القيمة الافتراضية لمعلمات الطلب كما هو موضح هنا -

public ResponseEntity getProduct(
   @RequestParam(value = "name", required = false, defaultValue = "honey") String name) {
}

GET API

طريقة طلب HTTP الافتراضية هي GET.  هذه الطريقة لا تتطلب أي نص طلب.  يمكنك إرسال معلمات الطلب ومتغيرات المسار لتحديد عنوان URL المخصص أو الديناميكي.

 نموذج التعليمات البرمجية لتحديد طريقة طلب HTTP GET موضح أدناه.  في هذا المثال ، استخدمنا HashMap لتخزين المنتج.  لاحظ أننا استخدمنا فئة POJO كمنتج ليتم تخزينه.

 هنا ، طلب URI هو / منتجات وسوف يعرض قائمة المنتجات من مستودع HashMap.  يتم إعطاء ملف فئة وحدة التحكم أدناه يتضمن طريقة GET REST Endpoint.
package com.ahmedalmahallawi.demo.controller;

import java.util.HashMap;
import java.util.Map;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.tutorialspoint.demo.model.Product;

@RestController
public class ProductServiceController {
   private static Map<String, Product> productRepo = new HashMap<>();
   static {
      Product honey = new Product();
      honey.setId("1");
      honey.setName("Honey");
      productRepo.put(honey.getId(), honey);
      
      Product almond = new Product();
      almond.setId("2");
      almond.setName("Almond");
      productRepo.put(almond.getId(), almond);
   }
   @RequestMapping(value = "/products")
   public ResponseEntity<Object> getProduct() {
      return new ResponseEntity<>(productRepo.values(), HttpStatus.OK);
   }
}

POST API

يتم استخدام طلب HTTP POST لإنشاء مورد.  تحتوي هذه الطريقة على نص الطلب.  يمكننا إرسال معلمات الطلب ومتغيرات المسار لتحديد عنوان URL المخصص أو الديناميكي.

 يوضح المثال التالي نموذج التعليمة البرمجية لتحديد طريقة طلب HTTP POST.  في هذا المثال ، استخدمنا HashMap لتخزين المنتج ، حيث يكون المنتج فئة POJO.

 هنا ، يكون الطلب URI / products ، وسيُرجع السلسلة بعد تخزين المنتج في مستودع HashMap.
package com.ahmedalmahallaw.demo.controller;

import java.util.HashMap;
import java.util.Map;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.ahmedalmahallawi.demo.model.Product;

@RestController
public class ProductServiceController {
   private static Map<String, Product> productRepo = new HashMap<>();
   
   @RequestMapping(value = "/products", method = RequestMethod.POST)
   public ResponseEntity<Object> createProduct(@RequestBody Product product) {
      productRepo.put(product.getId(), product);
      return new ResponseEntity<>("Product is created successfully", HttpStatus.CREATED);
   }
}

PUT API

يتم استخدام طلب HTTP PUT لتحديث المورد الموجود.  تحتوي هذه الطريقة على طلب نص.  يمكننا إرسال معلمات الطلب ومتغيرات المسار لتحديد عنوان URL المخصص أو الديناميكي.

 يوضح المثال الوارد أدناه كيفية تحديد طريقة طلب HTTP PUT.  في هذا المثال ، استخدمنا HashMap لتحديث المنتج الحالي ، حيث يكون المنتج فئة POJO.

 هنا يكون طلب URI هو / products / {id} الذي سيعود السلسلة بعد المنتج إلى مستودع HashMap.  لاحظ أننا استخدمنا متغير المسار {id} الذي يحدد معرف المنتج الذي يجب تحديثه.
package com.ahmedalmahallawi.demo.controller;

import java.util.HashMap;
import java.util.Map;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.tutorialspoint.demo.model.Product;

@RestController
public class ProductServiceController {
   private static Map<String, Product> productRepo = new HashMap<>();
   
   @RequestMapping(value = "/products/{id}", method = RequestMethod.PUT)
   public ResponseEntity<Object> updateProduct(@PathVariable("id") String id, @RequestBody Product product) { 
      productRepo.remove(id);
      product.setId(id);
      productRepo.put(id, product);
      return new ResponseEntity<>("Product is updated successsfully", HttpStatus.OK);
   }   
}

DELETE API

يتم استخدام طلب HTTP Delete لحذف المورد الموجود.  لا تحتوي هذه الطريقة على أي نص طلب.  يمكننا إرسال معلمات الطلب ومتغيرات المسار لتحديد عنوان URL المخصص أو الديناميكي.

 يوضح المثال الوارد أدناه كيفية تحديد طريقة طلب HTTP DELETE.  في هذا المثال ، استخدمنا HashMap لإزالة المنتج الموجود ، وهو فئة POJO.

 طلب URI هو / products / {id} وسيُرجع السلسلة بعد حذف المنتج من مستودع HashMap.  استخدمنا متغير المسار {id} الذي يحدد معرف المنتج الذي يجب حذفه.
package com.ahmedalmahallawi.demo.controller;

import java.util.HashMap;
import java.util.Map;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.ahmedalmahallawi.demo.model.Product;

@RestController
public class ProductServiceController {
   private static Map<String, Product> productRepo = new HashMap<>();
   
   @RequestMapping(value = "/products/{id}", method = RequestMethod.DELETE)
   public ResponseEntity<Object> delete(@PathVariable("id") String id) { 
      productRepo.remove(id);
      return new ResponseEntity<>("Product is deleted successsfully", HttpStatus.OK);
   }
}

يمنحك هذا القسم مجموعة كاملة من التعليمات البرمجية المصدر.  لاحظ الرموز التالية لوظائفها -

 فئة التطبيق الرئيسي لـ Spring Boot - DemoApplication.java
package com.ahmedalmahallawi.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {
   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
}
The POJO class – Product.java
package com.ahmedalmahallawi.demo.model;

public class Product {
   private String id;
   private String name;

   public String getId() {
      return id;
   }
   public void setId(String id) {
      this.id = id;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
}
فئة التحكم REST
 - ProductServiceController.java

package com.ahmedalmahallawi.demo.controller;

import java.util.HashMap;
import java.util.Map;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.ahmedalmahallawi.demo.model.Product;

@RestController
public class ProductServiceController {
   private static Map<String, Product> productRepo = new HashMap<>();
   static {
      Product honey = new Product();
      honey.setId("1");
      honey.setName("Honey");
      productRepo.put(honey.getId(), honey);
      
      Product almond = new Product();
      almond.setId("2");
      almond.setName("Almond");
      productRepo.put(almond.getId(), almond);
   }
   
   @RequestMapping(value = "/products/{id}", method = RequestMethod.DELETE)
   public ResponseEntity<Object> delete(@PathVariable("id") String id) { 
      productRepo.remove(id);
      return new ResponseEntity<>("Product is deleted successsfully", HttpStatus.OK);
   }
   
   @RequestMapping(value = "/products/{id}", method = RequestMethod.PUT)
   public ResponseEntity<Object> updateProduct(@PathVariable("id") String id, @RequestBody Product product) { 
      productRepo.remove(id);
      product.setId(id);
      productRepo.put(id, product);
      return new ResponseEntity<>("Product is updated successsfully", HttpStatus.OK);
   }
   
   @RequestMapping(value = "/products", method = RequestMethod.POST)
   public ResponseEntity<Object> createProduct(@RequestBody Product product) {
      productRepo.put(product.getId(), product);
      return new ResponseEntity<>("Product is created successfully", HttpStatus.CREATED);
   }
   
   @RequestMapping(value = "/products")
   public ResponseEntity<Object> getProduct() {
      return new ResponseEntity<>(productRepo.values(), HttpStatus.OK);
   }
}

يمكنك إنشاء ملف JAR قابل للتنفيذ ، وتشغيل تطبيق الإقلاع في الربيع باستخدام أوامر Maven أو Gradle أدناه كما هو موضح -

 بالنسبة إلى Maven ، استخدم الأمر الموضح أدناه -
After “BUILD SUCCESS”, you can find the JAR file under the target directory.

For Gradle
gradle clean build
بعد "BUILD SUCCESSFUL" ، يمكنك العثور على ملف JAR ضمن دليل build / libs.

 يمكنك تشغيل ملف JAR باستخدام الأمر الموضح أدناه -

java –jar  

سيؤدي هذا إلى تشغيل التطبيق على منفذ Tomcat 8080 كما هو موضح أدناه



اضغط الآن على عنوان URL الموضح أدناه في تطبيق POSTMAN وشاهد الإخراج.

 عنوان URL لـ GET API هو: http: // localhost: 8080 / products



POST API URL is: http://localhost:8080/products

PUT API URL is: http://localhost:8080/products/3

DELETE API URL is: http://localhost:8080/products/3