So entwickeln Sie eine App mit der Jersey Java RESTful API auf einer Alibaba Cloud ECS-Instanz

Dieses Tutorial zeigt Ihnen, wie Sie eine App mithilfe der ** Jersey Java RESTful API ** auf einer ** Alibaba Cloud Elastic Compute Service ** -Instanz entwickeln.

Von Aditya, Alibaba Cloud Tech Share Autor. Tech Share , Ein Alibaba Cloud-Incentive-Programm, das den Austausch von technischem Wissen und Best Practices innerhalb der Cloud-Community fördert.

Mit der Verbreitung der digitalen Technologie wird dieselbe Anwendung auf einer Vielzahl von Geräten verfügbar, einschließlich Laptops, Mobiltelefonen und Fernsehgeräten. Die meisten Anwendungen, die erstellt werden oder erstellt werden, sind mehrstufig. In mehrschichtigen Anwendungen gibt es eine klare Unterscheidung zwischen dem, was jeder Typ erreichen kann. Dies ist aus geschäftlicher Sicht sinnvoll, da viel Geld gespart wird. Um jedoch die unterschiedlichen Anforderungen derselben Daten zu erfüllen, die für verschiedene Anwendungen verfügbar sind, benötigen wir einen gemeinsamen Speicherort, an dem mit geeigneten Sicherheitsregeln auf die Daten zugegriffen werden kann.

Aus Entwicklersicht geschieht der zunehmende Bedarf an Datenreplikationen zwischen verschiedenen Geräten und der technologische Wandel sehr schnell. Sie können es sich nicht leisten, das gesamte System herunterzufahren, nur um ein einfaches Upgrade durchzuführen und das Backend zu ändern. Wir müssen uns auch ohne großen Entwicklungsaufwand an neue Technologien anpassen können. Unter Berücksichtigung all dieser Kriterien bietet das REST-Framework eine klare Abstraktion zwischen anderen Ebenen, wie verschiedene Technologien auf Daten zugreifen können, z. B. mobile (Android und IOS) und Web-JavaScript-Technologien. Sie können sehen, dass es es tun wird.

Die Bereitstellung der REST-API auf einem lokalen Server ist ineffizient und zeitaufwändig. Schauen Sie sich stattdessen an, wie Sie die Alibaba Cloud Elastic Compute Service nutzen können, um die Java REST-API bereitzustellen und den Service für das Internet verfügbar zu machen. Machen wir das. Bevor Sie die API in der Cloud bereitstellen, müssen Sie jedoch zuerst die API erstellen. Hier erfahren Sie, wie Sie eine einfache jerseybasierte Java-REST-API erstellen und mit Tools testen.

JAVA REST API erstellen

REST bedeutet "Repräsentational State Transfer". REST sollte eine Entkopplung zwischen dem Server und dem Client herstellen, um wiederverwendbare Komponenten zu verwalten und deren Austausch jederzeit zu ermöglichen. Da REST zustandslos ist, können Sie die Leistung und Effizienz verbessern, indem Sie einen Cache auf Ihrem Server implementieren.

Erstellen wir nun eine einfache API, um Mitarbeiterdetails abzurufen und aufzuzeichnen.

Unten finden Sie das vollständige Tool, das ich für die Entwicklung verwende.

Eclipse IDE für JAVA EE-Entwickler

** Wählen Sie nach dem Anmelden bei der Alibaba Cloud Console unter Produkt die Option Elastic Compute Instance (https://www.alibabacloud.com/de/product/ecs) aus. ** ** **

Erstellen Sie eine Instanz, vorzugsweise in der nächsten Region. Folgen Sie den unteren Schritten. Für meinen Server habe ich das "Pay-as-you-go" -Modell mit der folgenden Konfiguration ausgewählt.

image.png

Ich plane, Windows 2016 Data Center Image für die ECS-Instanzen zu verwenden (https://www.alibabacloud.com/en/product/ecs). Ich habe das Netzwerk, die Systemkonfiguration und andere Werte auf Standard gesetzt. Klicken Sie auf Instanz erstellen, um fortzufahren.

Sobald die Instanz erstellt wurde, sieht sie auf der Konsole folgendermaßen aus.

image.png

Klicken Sie auf den Namen der ECS-Instanz und wählen Sie Sicherheitsgruppe> Regel konfigurieren> Sicherheitsgruppenregel hinzufügen. Geben Sie die folgenden Informationen ein:

image.png

Bitte beachten Sie, dass in 8080 mein Kater eingesetzt wird. Sie müssen es an den Ort ändern, an dem sich Apache Tomcat tatsächlich befindet.

Verbinden Sie die ECS-Instanz über das RDP-Protokoll und fahren Sie mit der Entwicklung mithilfe der erstellten Windows-VM fort.

API erstellen

Laden Sie die neueste "Eclipse IDE für JAVA EE-Entwickler" herunter und installieren Sie sie.

Installieren Sie die neueste Version des JDK und setzen Sie den Installationspfad auf "JAVA_HOME" und die Umgebungsvariable "Path". Sie müssen auch maven installieren. Es ist sehr einfach, Sie müssen die neueste Binärdistribution .zip herunterladen und entpacken und den Installationspfad in den Umgebungsvariablen "M2_HOME" und "Path" festlegen. Für die Zwecke dieses Artikels wird der Code als Zip-Datei bereitgestellt. Laden Sie das Projekt herunter und importieren Sie es in den Eclipse-Arbeitsbereich.

Laden Sie das Code-Repository hier herunter: https://alicloud-common.oss-ap-southeast-1.aliyuncs.com/RESTCodeRepo.zip

Importieren Sie den Code aus Datei> Importieren und wählen Sie im Dialogfeld Allgemein aus.

Schauen wir uns den importierten Code an. Eclipse hat die folgende Projektstruktur.

image.png

Wenn Sie sich ansehen, was im Bereitstellungsdeskriptor "pom.xml" für ein vollständiges Projekt enthalten ist, enthält es die Projektabhängigkeiten.

<project 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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.aditya.restapi</groupId>
    <artifactId>RESTfulExample</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>RESTfulExample Maven WebApplication</name>
    <url>http://maven.apache.org</url>

    <repositories>
        <repository>
            <id>maven2-repository.java.net</id>
            <name>Java.net Repository for Maven</name>
            <url>http://download.java.net/maven/2/</url>
            <layout>default</layout>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-server</artifactId>
            <version>1.8</version>
        </dependency>

        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-json</artifactId>
            <version>1.8</version>
        </dependency>
        
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-client</artifactId>
            <version>1.8</version>
        </dependency>

    </dependencies>

    <build>
        <finalName>RESTfulExample</finalName>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

Modellversion: Die Version, mit der der aktuelle POM kompatibel ist, mit 4.0.0 zur Unterstützung von Maven 3.

Artefakt-ID, Verpackung, Gruppen-ID, Version, Name: Diese werden beim Packen und zur Beschreibung des Projekts während der Bereitstellung verwendet.

Repository: Wird beim Packen verwendet und beschreibt das Projekt während der Bereitstellung. Dieses Tag besteht aus allen Repositorys, die von der Abhängigkeit abgerufen werden. Darunter können Sie mehrere Repositorys angeben.

Abhängigkeiten: Dieses Tag besteht aus allen Abhängigkeiten, die für Ihr Projekt benötigt werden. Ich verwende Jersey-bezogene Gläser für API und ich verwende auch JUNIT-Gläser.

Build: Das Build-Tag enthält vollständige Informationen darüber, wie die Anwendung im WAR-Format gepackt wird, wie der Name lautet und welche Version des Maven-Assembly-Plug-Ins zum Packen verwendet wird.

Wir benötigen ein Modell für die Daten, die wir empfangen und senden. Daher haben wir ein Employee.java-Modell erstellt, das den Namen, das Alter, das Gehalt und das Unternehmen enthält.

package com.aditya.model;

public class Employee {

    private String name;
    private String age;
    private int salary;
    private String company;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    
    public int getSalary() {
        return salary;
    }
    public void setSalary(int salary) {
        this.salary = salary;
    }
    public String getCompany() {
        return company;
    }
    public void setCompany(String company) {
        this.company = company;
    }
    @Override
    public String toString() {
        return "Employee [name=" + name + ", age=" + age + ", salary=" + salary + ", company=" + company + "]";
    }
}

Dieses Modell besteht aus Get-, Setter- und toString () -Methoden zum Abrufen, Speichern und Anzeigen von Informationen.

Es befindet sich im Paket "com.aditya.rest" von "JSONService.java", das den vollständigen Code der REST-API enthält.

package com.aditya.rest;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import com.aditya.model.Employee;

@Path("/json/empservice")
public class JSONService {

    @GET
    @Path("/get")
    @Produces(MediaType.APPLICATION_JSON)
    public Employee getEmpDetails() {

        Employee emp = new Employee();
        emp.setName("Aditya");
        emp.setCompany("ABC Corporation");
        emp.setAge("31");
        emp.setSalary(1000);

        return emp;

    }

    @POST
    @Path("/post")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response createEmpInJSON(Employee emp) {
        
        String result = "Employee saved : " + emp.toString();
        return Response.status(201).entity(result).build();
        
    }
    
}

Wir haben zuerst die Paketdeklaration und wir bemerken auch, dass alle Importe und Anmerkungen aus dem Trikotglas importiert werden.

Der anfängliche Pfad ordnet die Karte und die Klasse zu, und die Methode wird durch @GET / @POST identifiziert.

@GET:

Stellen Sie sicher, dass @GET getEmpDetails () zugeordnet ist, das Informationen zu den fest codierten Daten zurückgibt. Dies wird automatisch aufgehoben (JAVA-Objekt in JSON konvertieren). Dies ist der Vorteil von Jersey Servlet. Mal sehen wie.

@POST:

@POST wird createEMPInJSON () zugeordnet, das ein Marshalled-Objekt von einer Anforderung an ein Trikot-Servlet in ein emp-Objekt empfängt. Die Antwort wird mit dem Ergebnis im Status 201 (Erstellt) erstellt.

Web.xml

<web-app id="WebApp_ID" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <display-name>Restful Web Application</display-name>

    <servlet>
        <servlet-name>jersey-serlvet</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>com.aditya.rest</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>jersey-serlvet</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

</web-app>

Dies ist der API-Bereitstellungsdeskriptor. Der Anzeigename ist offensichtlich, da er aus dem Namen der Anwendung besteht. Es besteht aus dem Servlet-Namen, den wir verwenden, und die Servlet-Klasse besteht aus dem vollständig qualifizierten Namen des Servlets.

Darüber hinaus geben param-name und param-value die für die Webanwendung erforderlichen Funktionen an.

com.sun.jersey.api.json.POJOMappingFeature bietet die Möglichkeit, JSON Java-Objekten zuzuordnen.

Die Servlet-Zuordnung ordnet die Servlet-Funktionalität einem bestimmten URL-Muster zu.

Apache Tomcat 7: Laden Sie das Windows-Installationsprogramm über den offiziellen Link herunter. https://tomcat.apache.org/download-70.cgi

Führen Sie Tomcat7.exe aus und geben Sie den Ordner an, in dem Sie Tomcat7 installieren möchten.

Bereitstellen und Testen der API:

image.png

Klicken Sie mit der rechten Maustaste auf den Serverbereich und wählen Sie "Neu> Server".

image.png

Wählen Sie Tomcat 7 Server und dann Weiter. image.png

Wählen Sie Durchsuchen und geben Sie den Tomcat-Installationsordner an, um den Server zu erstellen.

Klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie "Ausführen als"> "Auf Server ausführen". Wenn die API bereitgestellt wird, befindet sie sich im folgenden Status.

Wählen Sie Durchsuchen und geben Sie den Tomcat-Installationsordner an, um den Server zu erstellen.

Klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie "Ausführen als"> "Auf Server ausführen". Wenn die API bereitgestellt wird, befindet sie sich im folgenden Status.

image.png

Installieren Sie den Insomnia Client, stellen Sie eine neue Anfrage und verwenden Sie den folgenden URI:

GET : http://localhost:8080/RESTfulExample/rest/json/empservice/get

POST : http://localhost:8080/RESTfulExample/rest/json/empservice/post

Die folgenden Reaktionen sind zu sehen.

image.png

image.png

Sie können auch über die öffentliche IP-Adresse der ECS-Instanz auf dieselbe API zugreifen, durch Ändern wird jedoch die API-URL nicht geändert.

GET - http://:8080/RESTfulExample/rest/json/empservice/get

POST - http://:8080/RESTfulExample/rest/json/empservice/post

Zusätzliche Schritte

  1. In einer Produktionsumgebung können Sie Geld sparen, indem Sie ein Windows-Server-Image der Version 1709 verwenden, das nur konsolenbasierten Zugriff bietet, jedoch ECS-Instanzen. Sie können viel Software auf ja / product / ecs reduzieren und die Leistung verbessern.

  2. Sie müssen auch einen Serverlastenausgleich für APIs verwenden, bei denen mehrere ECS-Images verwendet und skaliert werden sollen.

  3. Eine OAuth-ähnliche Authentifizierung kann in die API eingeführt werden, um Missbrauch zu verhindern und die Sicherheit zu erhöhen.

  4. Um die Sicherheitsfunktion der API zu verbessern, Alibaba Cloud DNS und [Anti-DDOS Pro](https: // www. Sie können die Verwendung von alibabacloud.com/en/product/ddos-pro in Betracht ziehen.

Recommended Posts

So entwickeln Sie eine App mit der Jersey Java RESTful API auf einer Alibaba Cloud ECS-Instanz
Stellen Sie lokal entwickelte Java-Anwendungen mit Cloud Toolkit auf Alibaba Cloud ECS-Instanzen bereit
Kontinuierliche Integration in Alibaba Cloud ECS Ubuntu-Instanzen mit Jenkins
So installieren und verwenden Sie Composer auf einer ECS-Instanz unter Ubuntu 16.04
So erstellen Sie eine App mit einem Plug-In-Mechanismus [C # und Java]
Installieren Sie NextCloud unter CentOS 7 mit Alibaba Cloud ECS
Verwendung der Java-API mit Lambda-Ausdrücken
Verwendung des LOG Java Producer von Alibaba Cloud
Stellen Sie in der IntelliJ IDEA-Umgebung entwickelte Java-Anwendungen für Alibaba Cloud ECS-Instanzen bereit
So installieren Sie Ruby auf einer EC2-Instanz von AWS
So pushen Sie mit Rails entwickelte Apps an Github
So erstellen Sie einen Anwendungsserver auf einer EC2-Instanz von AWS
So stellen Sie eine einfache Java-Servlet-App auf Heroku bereit
Initialisierung mit einer leeren Zeichenfolge für eine Instanz vom Typ Java-Zeichenfolge
So geben Sie db beim Erstellen einer App mit Rails an
So stellen Sie eine Kotlin (Java) -App auf AWS fargate bereit
So erstellen Sie eine App mit Tensorflow mit Android Studio
So entwickeln und registrieren Sie eine Sota-App in Java
So stellen Sie eine Java-Anwendung in Alibaba Cloud EDAS in Eclipse bereit
Umgang mit Instanzen
Ausführen des Postgresql-Kopierbefehls mit Spalteninformationen in Java
So wechseln Sie die Java-Version mit direnv im Terminal auf dem Mac
[Java] So drehen Sie ein zweidimensionales Array mit einer erweiterten for-Anweisung
So konvertieren Sie ein Array von Strings mit der Stream-API in ein Array von Objekten
Bereitstellen einer Node.js-Anwendung auf einer ECS-Instanz mithilfe des Cloud Toolkit
Java8 / 9-Anfänger: Streamen Sie API-Suchtpunkte und wie Sie damit umgehen
So beschneiden Sie ein Bild in libGDX
So überprüfen Sie, ob Java auf einem Mac installiert ist
So kompilieren Sie Java mit VsCode & Ant
[Java] Fassen Sie zusammen, wie Sie mit der Methode equals vergleichen können
Schritte zum Veröffentlichen einer Anwendung auf Heroku
[Leicht verständliche Erklärung! ] Verwendung der Java-Instanz
So wechseln Sie Java-Versionen auf dem Mac
So stellen Sie ein mit Java erstelltes System (Wicket-Spring-Boot) auf dem Campus-Server bereit
Ich mache eine Android-App und sie steckt voller Fehler und wie man sie löst
[Java] So testen Sie, ob es in JUnit null ist
Downgrade einer vorhandenen App, die mit Rails 5.2.4 erstellt wurde, auf 5.1.6
Stellen Sie Java-Webanwendungen mit maven in Azure bereit
Verwendung des Java-Frameworks mit AWS Lambda! ??
So erstellen Sie eine API mit GraphQL und Rails
So lösen Sie Ausdrucksprobleme in Java
[Rails] So erstellen Sie eine Umgebung mit Docker
[Java] Memo zum Schreiben der Quelle