ມາສ້າງ RESTful Web service ດ້ວຍ Jersey ກັນ

Breaking

Post Top Ad

Post Top Ad

Tuesday, September 10, 2019

ມາສ້າງ RESTful Web service ດ້ວຍ Jersey ກັນ

ມາສ້າງ RESTful Web service ດ້ວຍ Jersey ກັນ
Representational State Transfer (REST) ນັ້ນ​ຖືກ​ເວົ້າ​ເຖິງ​ເທື່ອທຳອິດ​ໃນ​ປີ 2000 ໂດຍ Roy Thomas Fielding ຊາວ​ອາ​ເມ​ຣິ​ກາ
ເມື່ອ​ມາ​ເບິ່ງ​ໃນ​ພາສາ Java ​ເຮົາ​ສາມາດ​ສ້າງ REST ໄດ້​ຢ່າງໃດ ສິ່ງ​ທີ່​ພົບ​ກໍ​ຄື ມີ​ວິທີ​ການສ້າງ​ໄດ້​ຫຼາກຫຼາຍ​ແບບ ຊຶ່ງ​ບໍ່​ເປັນ​ມາດຕະຖານ

ດັ່ງ​ນັ້ນ​ໃນ​ປີ 2008 ໄດ້​ເກີດ JSR 311  ຄື JAX-RS ມີສ່ວນ​ການ​ທຳ​ງານມາດຕະຖານ​ສຳລັບ​ສ້າງ REST service ຂຶ້ນ​ມາ ແລະ​ມີ library ທີ່​ສ້າງ​ຕາມ​ມາດຕະຖານ​ດັ່ງ​ກ່າວ ຄື Jersey ຊຶ່ງ​ໄດ້ຮັບ​ຄວາມ​ນິຍົມ​ຫຼາຍ​ສຳລັບ​ນັກ​ພັດທະນາ​ພາສາ Java ດັ່ງ​ນັ້ນ​ມາທຳ​ຄວາມ​ຮູ້​ຈັກ​ກັບ Jersey ກັນ​ວ່າ​ແມ່ນຫຍັງ ແລະ ​ເລີ່ມ​ພັດທະນາ​ໄດ້​ຢ່າງໃດ

ພື້ນ​ຖານ​ຂອງ REST ນັ້ນ​ຄື ການ​ໃຊ້​ງານ resource ຕ່າງ​ໆ ຜ່ານ HTTP protocol, URI ທີ່​ສື່​ສານ​ໄດ້​ຊັດເຈນ ແລະ HTTP method ທີ່​ເໝາະ​ສົມ ເຊັ່ນ

  • HTTP GET ສຳລັບ​ການ​ດຶງ​ຂໍ້​ມູນ
  • HTTP POST ສຳລັບ​ການສ້າງ​ຂໍ້​ມູນ
  • HTTP PUT ສຳລັບ​ການ​ແກ້​ໄຂ​ຂໍ້​ມູນ
  • HTTP DELETE ສຳລັບ​ລົບ​ຂໍ້​ມູນ
ຮູບ​ແບບ​ຂອງ​ຂໍ້​ມູນ​ທີ່​ໃຊ້​ສື່​ສານ​ກັນ​ຢູ່ໃນ​ຮູບ​ແບບ XML, JSON, Atom ແລະ​ອື່ນ​ໆ ອີກ​ຫລວງ​ຫລາຍ
ແຕ່​ໜຶ່ງ​ໃນ​ຮູບ​ແບບ​ທີ່​ໄດ້ຮັບ​ຄວາມ​ນິຍົມ​ຄື JSON

ແລ້ວ JSR 311 ແລະ Jersey ແມ່ນຫຍັງ JSR 311 ຫລື JAX-RS ( Java API for RESTful Web Service ) ໂດຍ​ບ່ອນ​ເຮັດວຽກ​ກຳນົດ​ກຸ່ມ​ຂອງ APIs ເພື່ອ​ສ້າງ REST Web Service ແບບ​ງ່າຍໆ

ຖ້າເບິ່ງຍ້ອນ​ກັບ​ໄປ​ກ່ອນທີ່ຈະ​ເກີດ JSR 311 ນີ້​ຈະ​ເຈີ library ຫລື REST framework ຕ່າງ​ໆ ຫລວງ​ຫລາຍ ເຊັ່ນ Restlet ແລະ RESTEasy ທີ່​ມີ​ຮູບ​ແບບ​ການ​ພັດທະນາ​ທີ່​ບໍ່​ເປັນ​ມາດຕະຖານ ດັ່ງ​ນັ້ນ​ຈຶ່ງ​ສ້າງ library ທີ່​ອ້າງ​ອິງ​ຕາມ JSR 311 ຂຶ້ນ​ມາ ຊຶ່ງ​ຕົວ​ນັ້ນ​ກໍ​ຄື Jersey ໂດຍ Jersey ປະກອບ​ໄປ​ດ້ວຍ​ສ່ວນ​ການ​ເຮັດ​ວຽກງານ​ຫຼັກ​ໆ ດັ່ງ​ນີ້
  • Core Server ມີ​ພວກ annotation ແລະ APIs ຕາມ JSR 311
  • Core Client ຄື Client APIs ຊ່ວຍ​ເຮັດໃຫ້​ເຮົາ​ສາມາດ​ຕິດ​ຕໍ່​ກັບ REST service ໄດ້​ງ່າຍໆ
  • Integration ຄື​ສ່ວນ​ທີ່​ໃຊ້​ສຳລັບ integrate ທ່ານ​ກັບ framework ຕ່າງ​ໆ ເຊັ່ນ  Spring framework, Guice ເປັນ​ຕົ້ນ
ໃນ​ບົດ​ຄວາມ​ນີ້ ຈະ​ເນັ້ນ​ໃນ​ເລື່ອງ Core Server ນັ້ນ​ຄື​ການສ້າງ RESTful Web service ນັ້ນ​ເອງ

ມາ​ເບິ່ງ​ຂັ້ນ​ຕອນ​ການສ້າງ​ດີກວ່າ ວ່າ​ເຮັດ​ແນວໃດ ??

1. ເລີ່ມ​ດ້ວຍ Software ທີ່​ຈຳ​ເປ້ນ​ຕ້ອງ​ໃຊ້​ງານ​ກັນ ກໍ​ຄື Apache Maven ນັ້ນ​ເອງ
2. ສ້າງ project ຂອງ​ເຮົາ​ດ້ວຍ Apache Maven ດ້ວຍ​ຄຳ​ສັ່ງ​ດັ່ງ​ນີ້

mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-grizzly2 \
-DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false \
-DgroupId=com.rest.demo -DartifactId=first-demo -Dpackage=com.rest.demo \
-DarchetypeVersion=2.9



ຜົນ​ການ​ທຳງານ ຈະ​ສ້າງ folder ຊື່​ວ່າ first-demo ຂຶ້ນ​ມາ ໂດຍ​ໃນ folder ຈະ​ມີ​ໂຄງ​ສ້າງ​ດັ່ງ​ນີ້
ມາສ້າງ RESTful Web service ດ້ວຍ Jersey ກັນ

ແລະ RESTful Web Service ທີ່​ເຮົາ​ສ້າງ​ນີ້ ຈະ​ເຮັດວຽກ​ຢູ່​ເທິງ Grizzly container ເຊິ່ງ​ເຮັດໃຫ້​ເຮົາ​ສາມາດ run service ທີ່​ເຮົາ​ສ້າງ​ຂຶ້ນ​ມາ​ໄດ້​ທັນ​ທີ  ໂດຍ​ບໍ່​ຕ້ອງ​ການ Web server ອື່ນ​ໆ ເລີຍເຮັດໃຫ້​ສາມາດ​ພັດທະນາ​ລະບົບ​ງານ​ໄດ້​ຢ່າງ​ວ່ອງໄວ​ຂຶ້ນ
3. ເມື່ອ​ເບິ່ງ​ຈາກ code ທີ່​ຖືກ​ສ້າງ​ຂຶ້ນ​ມາ​ຢ່າງ​ອັດ​ຕະໂນດ ພົ​ບວ່າ​ມີ code ທີ່​ໜ້າ​ສົນ​ໃຈ​ຢູ່ 2 ໄຟ​ລ​໌​ກໍ​ຄື
3.1 ໄຟ​ລ​໌ MyResourceTest.java ສຳລັບ​ທົດສອບ RESTful Web Service ທີ່​ເຮົາ​ຈະ​ສ້າງ​ຂຶ້ນ​ມາ
ໂດຍ​ໃນ​ການ​ທົດສອບ​ນັ້ນ ຕ້ອງ​ການສ້າງ URI / resource ເມື່ອ​ເອີ້ນ​ໃຊ້​ງານ​ຜ່ານ HTTP GET ຈະ​ຕ້ອງ​ສົ່ງ​ຜົນ​ລັບ​ Got it! ກັບ​ມາ ຊຶ່ງ​ມີ code ດັ່ງ​ນີ້


package com.rest.demo;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;

import org.glassfish.grizzly.http.server.HttpServer;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class MyResourceTest {

    private HttpServer server;
    private WebTarget target;

    @Before
    public void setUp() throws Exception {
        server = Main.startServer();
        Client c = ClientBuilder.newClient();
        target = c.target(Main.BASE_URI);
    }

    @After
    public void tearDown() throws Exception {
        server.stop();
    }

    @Test
    public void testGetIt() {
        String responseMsg = target.path("myresource").request().get(String.class);
        assertEquals("Got it!", responseMsg);
    }
}


3.2 ໄຟ​ລ​໌ MyResource.java ຄື​ໄຟ​ລ​໌​ສຳລັບ​ການສ້າງ resource ຫລື URI ຂອງ service ທີ່​ເຮົາ​ຕ້ອງ​ການ
ໃນ​ການ​ພັດທະນາ​ຈະ​ໃຊ້ annotation ຕ່າງ​ໆ ຂອງ Core server ດັ່ງ​ນີ້
  • @PATH (“your path”) ຄື path ຂອງ resource ທີ່​ຕ້ອງ​ການ ໂດຍ​ຊື່​ຂອງ path ຈະ​ຕໍ່​ຈາກ url ຫຼັກ​ຂອງ server ເຮົາ​ນັ້ນ​ເອງ ເຊັ່ນ localhost:8080/myresource
  • @GET ຮອງ​ຮັບ request ທີ່​ມາ​ຈາກ HTTP GET ເທົ່າ​ນັ້ນ
  • @Produces (MediaType.TEXT_PLAIN) ຄື​ການ​ກຳນົດ MIME type ຫລື​ຮູບ​ແບບ​ຂໍ້​ມູນ​ທີ່​ຈະ​ສົ່ງ​ກັບ​ໄປ​ຜູ້​ສົ່ງ request ໂດຍ​ຈາກ​ຕົວ​ຢ່າງ​ຈະ​ສົ່ງ text ກັບ​ໄປ ນັ້ນ​ເອງ
package com.rest.demo;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("myresource")
public class MyResource {
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getIt() {
        return "Got it!";
    }
}


4. ເມື່ອ​ທຸກ​ຢ່າງ​ຮຽບຮ້ອຍ ໃຫ້ທຳການ​ທົດສອບ​ວ່າ​ເຮັດວຽກ​ໄດ້​ບໍ​ດ້ວຍ​ຄຳ​ສັ່ງ
$mvn clean test
ຜົນ​ການ​ທຳງານ
ມາສ້າງ RESTful Web service ດ້ວຍ Jersey ກັນ

5. ເມື່ອ​ທົດສອບ​ຜ່ານ​ຮຽບຮ້ອຍ ເຮົາ​ສາມາດ​ສັ່ງ​ໃຫ້ Start RESTful Web Service ຂຶ້ນ​ມາ​ໄດ້ ດ້ວຍ​ຄຳ​ສັ່ງ
$mvn exec:java
ຜົນ​ການ​ເຮັດ​ວຽກງານ

ມາສ້າງ RESTful Web service ດ້ວຍ Jersey ກັນ

ຈະ​ທຳການ start server ດ້ວຍ port 8080 ແລະ ​ສາມາດ​ເຂົ້າ​ໃຊ້​ງານ​ຜ່ານ browser ໄດ້​ດັ່ງ​ຮູບ

ມາສ້າງ RESTful Web service ດ້ວຍ Jersey ກັນ
ມາ​ເຖິງ​ບ່ອນ​ນີ້​ກໍ​ພໍ​ເຫັນ​ວ່າ ການ​ເລີ່ມ​ຕົ້ນ​ສ້າງ RESTful Web Service ດ້ວຍ Jersey ນັ້ນ​ກໍ​ບໍ່​ຍາກ​ຫຍັງ​ເທົ່າໃດ
ແຕ່​ຢ່າ​ເອົາ​ໄປ​ປຽບທຽບ​ກັບ​ພາສາ​ອື່ນ​ເດີ້ ເພາະ​ມັນ​ບໍ່​ສາມາດ​ປຽບທຽບ​ໄດ້​ເລຍ

ຕໍ່​ມາ ເຮົາຈະທຳການຕັ້ງ​ໂຈ​ດ​ວ່າ ຖ້າ​ເຮົາ​ຕ້ອງ​ການສ້າງ service ມີ​ຮູບ​ແບບ​ດັ່ງ​ນີ້ ຈະ​ເຮັດ​ແນວໃດ ?

  • ມີ URI / person
  • ຮອງ​ຮັບ request ທີ່​ສົ່ງ​ມາ​ຜ່ານ HTTP GET ເທົ່າ​ນັ້ນ
  • ທຳການ​ສົ່ງ​ຂໍ້​ມູນ​ຮູບ​ແບບ JSON ຊຶ່ງ​ເປັນ​ລາຍ​ລະອຽດ​ຂອງ person ປະກອບ​ໄປ​ດ້ວຍ id ແລະ name
ເລີ່ມ​ດ້ວຍທຳການ​ເພີ່ມ​ສິ່ງ​ທີ່​ຕ້ອງ​ການ​ເຂົ້າໄປ​ໃນ pom.xml ກ່ອນ ນັ້ນ​ກໍ​ຄື library ທີ່​ເຮົາ​ຕ້ອງ​ການ ຄື jersey
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>2.9</version>
</dependency>

ຕໍ່​ຈາກ​ນັ້ນ​ຂຽນ test ກ່ອນ​ວ່າ ເຮົາ​ຕ້ອງ​ການ​ຫຍັງ ດັ່ງ​ນີ້
@Test
public void getPersonDetail() {
                PersonValue expectedResult = new PersonValue(1, "UP1");
                PersonValue personValue = target.path("person").request().get(PersonValue.class);
                assertEquals(expectedResult.getId(), personValue.getId());
                assertEquals(expectedResult.getName(), personValue.getName());
}

ຜົນ​ຈາກ​ການ​ທົດສອບ​ຈະ​ເຮັດວຽກ​ຜິດ​ພາດ ເນື່ອງ​ຈາກ​ຢັງ​ບໍ່ທຳການ implement service ເລີຍ ດັ່ງ​ຮູບ
ມາສ້າງ RESTful Web service ດ້ວຍ Jersey ກັນ

ດັ່ງ​ນັ້ນ ຈຶ່ງ​ທຳການສ້າງ​ໄຟ​ລ​໌ Person.java ຂຶ້ນ​ມາ ເພື່ອ​ເຮັດ​ການສ້າງ resource ຂອງ service ທີ່​ຕ້ອງ​ການ​ດັ່ງ​ນີ້
package com.rest.demo;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("person")
public class Person {
                @GET
                @Produces(MediaType.APPLICATION_JSON)
                public PersonValue getAll() {
                                return new PersonValue(1, "UP1");
                }
}

ທຳການ​ທົດສອບ​ອີກ​ເທື່ອກໍ່ຈະ​ຜ່ານ ຊຶ່ງ​ມີ​ຜົນ​ການ​ທຳງານ​ດັ່ງ​ຮູບ
ມາສ້າງ RESTful Web service ດ້ວຍ Jersey ກັນ

ຖ້າ​ບໍ່​ເຊື່ອ​ໃນ​ສິ່ງ​ທີ່​ທົດສອບ​ກໍ​ລອງ​ເຂົ້າໄປ​ເບິ່ງ​ຜົນ​ຜ່ານ browser ເຊິ່ງກໍ່ຈະໄດ້​ຜົນລັບ​ດັ່ງ​ນີ້
ມາສ້າງ RESTful Web service ດ້ວຍ Jersey ກັນ

ມາ​ເຖິງ​ຕອນ​ນີ້ ເຮົາ​ກໍ​ສາມາດ​ສ້າງ RESTful Web Service ຕາມ​ແບບ​ທີ່​ເຮົາ​ຕ້ອງ​ການ​ໄດ້ ໂດຍ​ເລີ່ມ​ຈາກ​ການ​ຂຽນ Test ກ່ອນ ເພື່ອລະ​ບຸ​ຂອບ​ເຂດ​ຂອງ​ບັນຫາ​ວ່າຕ້ອງ​ການ​ຈະ​ແກ້​ໄຂ​ບັນຫາ​ຫຍັງ ແລ້ວ​ຈຶ່ງ​ລົງ​ມື coding ເພື່ອ​ເຮັດໃຫ້ Test ນັ້ນ​ຜ່ານ ຊຶ່ງ​ເປັນ​ການ​ພັດທະນາ​ຕາມ​ແນວ​ຄິດ​ຂອງ Test Driven Development ແຕ່​ກໍຍັງບໍ່​ຄົບ​ຂັ້ນ​ຕອນ​ການ​ທຳງານ ເນື່ອງ​ຈາກ​ເຮົາຍັງ​ຂາດ​ການ Refactoring  code ແຕ່​ບໍ່​ເປັນ​ຫຍັງ ເນື່ອງ​ຈາກ​ຕອນ​ນີ້​ເຮົາ​ສົນ​ໃຈ​ວິທີ​ການສ້າງ RESTful Web Service ດ້ວຍ Jersey ເທົ່າ​ນັ້ນ

ແຫຼ່ງທີ່ມາ: jersey,rest, somkiat

No comments:

Post a Comment

Post Top Ad