Saturday, June 30, 2018

Rest API using Play Framework in Java

Halooo . . .
Kali ini saya membuat tulisan mengenai Rest API menggunakan Play Framework khususnya java pada play framework

Sebelumnya, apa itu play framework?
Play Framework adalah framework open souce aplikasi web yang ditulis dengan Scala dan juga pemrograman lainnya seperti Java.
Biasanya pemrograman yang menggunakan java membutuhkan waktu untuk proses build dan deploy. Nah, dengan menggunakan framework ini, hasil coding tersebut hanya cukup kita save dan refresh browser atau postman untuk melihat hasil coding yang kita kerjakan.
Terkadang ada juga pemrograman yang menggunakan java harus restart server terlebih dahulu, padahal yang di edit hanya sedikit line code.

Typesafe Activator merupakan platform yang bisa digunakan untuk membuat dan menjalankan project play framework. Untuk download typesafe activator dapat di download pada link berikut: http://typesafe.com/activator
atau jika anda menggunakan mac, cukup gunakan perintah berikut pada terminal anda :
brew install typesafe-activator

Tanpa basa-basi kita create new project dulu ya . .
  1.  Create new Project

    Pertama buka terminal terlebih dahulu, dan pergi ke direktori dimana kita akan create project baru kita
    Gambar 1

    Kemudian ketik perintah : activator new 

    Gambar 2
    Maka akan muncul beberapa pilihan seperti gambar di atas (Gambar 2). dan kita akan memilih nomor 5

    Gambar 3
    Pada gambar diatas (Gambar 3) project sudah berhasil di create dengan nama project (play-java) 

    Untuk menjalankannya : activator run
    Gambar 4
    untuk testing di postman atau di browser : //localhost:9000

    Gambar 5 Tampilan awal Play Framework
  2.  Konfigurasi database
    Tambahkan code-code berikut pada file:

    Pada file build.sbt :



  3. Pada file plugins.sbt : 

            

     Pada file application.conf :
  4. Models
    Selanjutnya kita akan membuat model
    package models;
    import com.avaje.ebean.Model;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table(name = "anggota")
    public class Anggota extends Model {
        @Id    
        private Integer id_anggota;
        private String nama_anggota;
        private String alamat_anggota;
    
        public Integer getId_anggota() {
            return id_anggota;    }
        public void setId_anggota(Integer id_anggota) {
            this.id_anggota = id_anggota;    }
    
        public String getNama_anggota() {
            return nama_anggota;    }
    
        public void setNama_anggota(String nama_anggota) {
            this.nama_anggota = nama_anggota;    }
    
        public String getAlamat_anggota() {
            return alamat_anggota;    }
    
        public void setAlamat_anggota(String alamat_anggota) {
            this.alamat_anggota = alamat_anggota;    }
    }
    
  5. Controller
    Dan ini untuk controller
    package controllers;
    import repository.AnggotaRepository;
    import com.fasterxml.jackson.databind.JsonNode;
    import models.Anggota;
    import org.springframework.beans.factory.annotation.Autowired;
    import play.libs.Json;
    import play.mvc.Controller;
    import play.mvc.Result;
    
    import java.util.List;
    public class AnggotaController extends Controller {
    
        @Autowired    AnggotaRepository anggotaRepository;
        public Result viewAnggota(String nama){
            List<Anggota> anggotas = anggotaRepository.cocoTasks(nama);
    
    return ok(Json.toJson(anggotas));
    } public Result listAnggota(){ List<Anggota> anggotas = anggotaRepository.cocoList();
    return ok(Json.toJson(anggotas));
    } public Result createAnggota() { JsonNode json = request().body().asJson();
    Anggota anggota = new Anggota();   
    anggota = (Anggota)Json.fromJson(json,Anggota.class);  
    anggota.save();
    return ok(Json.toJson(anggota));
    } public Result updateAnggota(){
    JsonNode json = request().body().asJson();
    Anggota anggota = new Anggota(); anggota = (Anggota)Json.fromJson(json, Anggota.class); anggota.update(); return ok(Json.toJson(anggota));
    } public Result delete(Integer id_anggota){ Anggota anggota = anggotaRepository.findById(id_anggota); if(anggota==null){   return notFound(Json.toJson("Anggota not Found"));  } anggota.delete(); return ok(Json.toJson("Anggota "+id_anggota+"has been deleted")); } }
  6. Repository
    Dalam project sederhana ini, saya buat file repository. Dimana dalam file ini berisi query-query data yang saya gunakan
    package repository;
    import com.avaje.ebean.Model;import models.Anggota;
    import java.util.List;
    public class AnggotaRepository {
    
        public static Model.Finder<Integer, Anggota> find = 
            new Model.Finder<Integer, Anggota>(Integer.class, Anggota.class);
    
        public static   List<Anggota> cocoTasks(String nama){
            return  find                .query().where()
                    .ilike("nama_anggota","%"+nama+"%")
                    .orderBy("id_anggota").findList();
        }
        public static List<Anggota> cocoList(){
            return  find.orderBy("id_anggota").findList();
        }
    
        public static Anggota findById(Integer id_anggota){
            return find.byId(id_anggota);    }
    }
    
    
    
    
  7. Mapping
    Action-action yang sudah kita code dalam controller dapat kita mapping. Untuk mapping dapat di kita lakukan pada file play-java/conf/routes
    # Routes
    # This file defines all application routes (Higher priority routes first)
    # ~~~~
    
    # An example controller showing a sample home page
    GET     /                           controllers.HomeController.index
    
    GET  /anggota/nama_anggota=:nama_anggota  controllers.AnggotaController.viewAnggota(nama_anggota:String)
    GET   /list-anggota                       controllers.AnggotaController.listAnggota()
    POST  /create-anggota                     controllers.AnggotaController.createAnggota()
    POST  /update-anggota                     controllers.AnggotaController.updateAnggota()
    DELETE  /delete-anggota/:id_anggota       controllers.AnggotaController.delete(id_anggota:Integer)
    
    # An example controller showing how to use dependency injection
    GET     /count                      controllers.CountController.count
    # An example controller showing how to write asynchronous code
    GET     /message                    controllers.AsyncController.message
    
    # Map static resources from the /public folder to the /assets URL path
    GET     /assets/*file               controllers.Assets.versioned(path="/public", file: Asset)
  8. Demo
    - Action Create
    Gambar 6. Action Create

    - Action View
    Gambar 7. List Anggota

    Gambar 8. search by nama anggota

    - Action Update
    Gambar 9. Action Update

    - Action Delete
    Gambar 10. Action Delete


    Begitu lah sharing singkat mengenai Rest API using Play Framework
    Sekian dari saya dan semoga tulisan ini bermanfaat.
    Terima kasih,

    Salam

    Reference :
    https://www.playframework.com/documentation/
    http://www.baeldung.com/rest-api-with-play
    https://www.youtube.com/watch?v=qKxgtmuPjHQ

No comments:

Post a Comment