Last Updated on April 5, 2022 by
REST API adalah salah satu dari desain arsitektur yang berada di dalam API itu sendiri. REST dengan menjadi standar untuk membangun layanan web pada suatu situs karena mudah dibuat dan digunakan.
REST cocok digunakan pada dunia layanan mikro. REST menerapkan prinsip web, termasuk arsitektur, manfaat, dan lainnya. Menggunakan REST sangat bermanfaat bagi Anda para developer karena web dan protokol intinya, HTTP, menyediakan banyak fitur diantaranya:
- Cocok untuk actions seperti get, post, put, delete dan lain-lain.
- Melakukan cache
- Mengalihkan dan meneruskan
- Keamanan seperti enskripsi dan autentikasi.
Fitur tersebut merupakan faktor penting dalam membangun layanan yang resilien. Namun, hal tersebut belum sepenuhnya. Web dibangun dengan banyak spesifikasi kecil, sehingga dapat berkembang dengan mudah, tanpa terjebak dalam standar.
Developer dapat memanfaatkan toolkit pihak ketiga yang menerapkan spesifikasi beragam ini dan secara instan memiliki teknologi klien dan server di ujung jari mereka. Dengan membangun di atas HTTP, REST API akan menyediakan sarana untuk membuat beberapa hal berikut:
- API yang kompatibel dengan versi sebelumnya
- API yang Dapat Dikembangkan
- Layanan berskala
- Layanan yang aman
- Spektrum layanan stateless hingga stateful
Perlu diingat bahwa REST bukanlah standar, melainkan sebuah pendekatan, gaya, sekumpulan batasan pada arsitektur Anda yang dapat membantu Anda membangun sistem skala web. Spring Boot dapat bekerja dengan IDE apa pun.
Anda dapat menggunakan Eclipse, IntelliJ IDEA, Netbeans, dll. Spring Tool Suite adalah distribusi IDE berbasis Eclipse open-source yang menyediakan superset dari distribusi Java EE dari Eclipse. Hal ini mencakup fitur yang membuat bekerja dengan aplikasi Spring menjadi lebih mudah.
Ini sama sekali tidak diperlukan. Tetapi pertimbangkan itu jika Anda menginginkan ekstra penekanan tombol Anda. Pada tutorial ini kami akan menampilkan tutorial membuat REST API dengan Spring Boot.
Membuat Payroll Sederhana
Kami akan menggunakan contoh pembuatan manajemen karyawan. Hal pertama yang dilakukan adalah membuat Payroll service yang sederhana yang dapat digunakan untuk melakukan manajemen karyawan dari suatu perusahaan.
Pada tutorial ini akan dilakukan penyimpanan objek employee dalam database (H2 dalam memori), dan mengaksesnya (melalui sesuatu yang disebut JPA). Kemudian kami akan membungkusnya dengan sesuatu yang akan memungkinkan akses melalui internet (disebut lapisan Spring MVC). Kode berikut adalah cara mendefinisikannya pada sistem nonrest / src / main / java / payroll / EmployeeController.java
package payroll;
import java.util.Objects;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
class Employee {
private @Id @GeneratedValue Long id;
private String name;
private String role;
Employee() {}
Employee(String name, String role) {
this.name = name;
this.role = role;
}
public Long getId() {
return this.id;
}
public String getName() {
return this.name;
}
public String getRole() {
return this.role;
}
public void setId(Long id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setRole(String role) {
this.role = role;
}
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (!(o instanceof Employee))
return false;
Employee employee = (Employee) o;
return Objects.equals(this.id, employee.id) && Objects.equals(this.name, employee.name)
&& Objects.equals(this.role, employee.role);
}
@Override
public int hashCode() {
return Objects.hash(this.id, this.name, this.role);
}
@Override
public String toString() {
return "Employee{" + "id=" + this.id + ", name='" + this.name + '\'' + ", role='" + this.role + '\'' + '}';
}
}
Kelas Java ini berisi:
- @Entity adalah anotasi JPA untuk membuat objek ini siap disimpan di penyimpanan data berbasis JPA.
- id, name, dan role adalah atribut dari employee atribut object domain. id ditandai dengan lebih banyak anotasi JPA untuk menunjukkan bahwa itu adalah kunci utama dan diisi secara otomatis oleh penyedia JPA.
- Konstruktor khusus dibuat saat perlu membuat instance baru, tetapi belum memiliki id.
Dengan menggunakan definisi objek domain ini, sekarang kita dapat beralih ke Spring Data JPA untuk menangani interaksi database. Repositori JPA Spring Data adalah antarmuka dengan metode yang mendukung pembuatan, pembacaan, pembaruan, dan penghapusan catatan terhadap penyimpanan data back end.
Beberapa repositori juga mendukung paging data dan pengurutan. Spring Data mensintesis implementasi berdasarkan konvensi yang ditemukan dalam penamaan metode di antarmuka. Ada beberapa implementasi repositori selain JPA.
Anda dapat menggunakan Spring Data MongoDB, Spring Data GemFire, Spring Data Cassandra, dll. Untuk tutorial ini, kami akan tetap menggunakan JPA. Spring memudahkan pengaksesan data.
Dengan hanya mendeklarasikan antarmuka EmployeeRepository berikut, kami secara otomatis akan dapat melakukan berbagai hal seperti create new employee, update, delete, dan find employees.
Klik kanan dan jalankan PayRollApplication maka Anda akan mendapatkan:
...
2018-08-09 11:36:26.169 INFO 74611 --- [main] payroll.LoadDatabase : Preloading Employee(id=1, name=Bilbo Baggins, role=burglar)
2018-08-09 11:36:26.174 INFO 74611 --- [main] payroll.LoadDatabase : Preloading Employee(id=2, name=Frodo Baggins, role=thief)
...
Membuat HTTP sebagai Platform
Untuk melakukan wrap repositori Anda dengan lapisan web, Anda harus beralih ke Spring MVC. Berkat Spring Boot, hanya ada sedikit infrastruktur untuk dikodekan. Sebaliknya, kita bisa fokus pada tindakan:
nonrest / src / main / java / payroll / EmployeeController.java
package payroll;
import java.util.List;
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.RestController;
@RestController
class EmployeeController {
private final EmployeeRepository repository;
EmployeeController(EmployeeRepository repository) {
this.repository = repository;
}
// Aggregate root
// tag::get-aggregate-root[]
@GetMapping("/employees")
List<Employee> all() {
return repository.findAll();
}
// end::get-aggregate-root[]
@PostMapping("/employees")
Employee newEmployee(@RequestBody Employee newEmployee) {
return repository.save(newEmployee);
}
// Single item
@GetMapping("/employees/{id}")
Employee one(@PathVariable Long id) {
return repository.findById(id)
.orElseThrow(() -> new EmployeeNotFoundException(id));
}
@PutMapping("/employees/{id}")
Employee replaceEmployee(@RequestBody Employee newEmployee, @PathVariable Long id) {
return repository.findById(id)
.map(employee -> {
employee.setName(newEmployee.getName());
employee.setRole(newEmployee.getRole());
return repository.save(employee);
})
.orElseGet(() -> {
newEmployee.setId(id);
return repository.save(newEmployee);
});
}
@DeleteMapping("/employees/{id}")
void deleteEmployee(@PathVariable Long id) {
repository.deleteById(id);
}
}
- @RestController menunjukkan bahwa data yang dikembalikan oleh setiap metode akan ditulis langsung ke dalam isi respons alih-alih merender template.
- EmployeeRepository dimasukkan oleh konstruktor ke dalam pengontrol.
- Ada rute untuk setiap operasi (@GetMapping, @PostMapping, @PutMapping dan @DeleteMapping, sesuai dengan panggilan HTTP GET, POST, PUT, dan DELETE). Hal ini akan sangat berguna untuk membaca setiap metode dan memahami apa yang dilakukan.
- EmployeeNotFoundException adalah pengecualian yang digunakan untuk menunjukkan saat karyawan mencari tetapi tidak ditemukan.
Saat ‘EmployeeNotFoundException’ muncul, informasi tambahan konfigurasi Spring MVC ini digunakan untuk merender HTTP 404:
package payroll;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
@ControllerAdvice
class EmployeeNotFoundAdvice {
@ResponseBody
@ExceptionHandler(EmployeeNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
String employeeNotFoundHandler(EmployeeNotFoundException ex) {
return ex.getMessage();
}
}
Jika Anda ingin meluncurkan aplikasi, maka klik kanan ‘public static void main’ pada PayRollApplication dan pilih Run dari IDE Anda atau Spring Initializr akan menggunakan Maven Wrapper jadi dapat mengetik:
$ ./mvnw clean spring-boot:run
Kode alternatif yang dapat Anda gunakan adalah versi Maven yaitu:
$ mvn clean spring-boot:run
Ketika aplikasi ini memulai, kita dapat menggunakan
$ curl -v localhost:8080/employees
Maka hasilnya:
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET /employees HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Thu, 09 Aug 2018 17:58:00 GMT
<
* Connection #0 to host localhost left intact
[{"id":1,"name":"Bilbo Baggins","role":"burglar"},{"id":2,"name":"Frodo Baggins","role":"thief"}]
Di sini Anda dapat melihat data pre-loaded, dan mendapat format kompak. Jika Anda mencoba dan kueri pengguna tidak ada
$ curl -v localhost:8080/employees/99
Maka Anda akan mendapatkan:
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET /employees/99 HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 404
< Content-Type: text/plain;charset=UTF-8
< Content-Length: 26
< Date: Thu, 09 Aug 2018 18:00:56 GMT
<
* Connection #0 to host localhost left intact
Could not find employee 99
Langkah ini adalah langkah untuk membuat dasar REST, Anda dapat mengubahnya menjadi RESTful, atau REST API. Khusus pada tutorial ini kami akan menjadikannya REST API.
3. Mengubahnya menjadi REST API.
Anda selalu dapat menambahkan kolom (bidang) ke tabel database. Prinsip ini juga digunakan untuk membuat RESTful. Tambahkan kolom baru ke representasi JSON Anda, tetapi jangan hapus apa pun. Seperti ini:
{
"id": 1,
"firstName": "Bilbo",
"lastName": "Baggins",
"role": "burglar",
"name": "Bilbo Baggins",
"_links": {
"self": {
"href": "http://localhost:8080/employees/1"
},
"employees": {
"href": "http://localhost:8080/employees"
}
}
}
Setelah ini maka employee akan merekam kedua handle klien baik yang lama maupun baru. Maka kodenya akan berubah sepetri ini:
package payroll;
import java.util.Objects;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
class Employee {
private @Id @GeneratedValue Long id;
private String firstName;
private String lastName;
private String role;
Employee() {}
Employee(String firstName, String lastName, String role) {
this.firstName = firstName;
this.lastName = lastName;
this.role = role;
}
public String getName() {
return this.firstName + " " + this.lastName;
}
public void setName(String name) {
String[] parts = name.split(" ");
this.firstName = parts[0];
this.lastName = parts[1];
}
public Long getId() {
return this.id;
}
public String getFirstName() {
return this.firstName;
}
public String getLastName() {
return this.lastName;
}
public String getRole() {
return this.role;
}
public void setId(Long id) {
this.id = id;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public void setRole(String role) {
this.role = role;
}
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (!(o instanceof Employee))
return false;
Employee employee = (Employee) o;
return Objects.equals(this.id, employee.id) && Objects.equals(this.firstName, employee.firstName)
&& Objects.equals(this.lastName, employee.lastName) && Objects.equals(this.role, employee.role);
}
@Override
public int hashCode() {
return Objects.hash(this.id, this.firstName, this.lastName, this.role);
}
@Override
public String toString() {
return "Employee{" + "id=" + this.id + ", firstName='" + this.firstName + '\'' + ", lastName='" + this.lastName
+ '\'' + ", role='" + this.role + '\'' + '}';
}
}
Penjelasan terkait kelas ini adalah:
1. bidang name digantikan oleh firstName dan lastName. Di sini Anda dapat menambahkan nama-nama karyawan sesuai kebutuhan.
2. Getter “virtual” untuk properti nama lama, getName () didefinisikan di sini. Hal ini menggunakan bidang firstName dan lastName untuk menghasilkan nilai.
3. Penyetel “virtual” untuk properti nama lama juga ditentukan, setName (). Ini mem-parsing string yang masuk dan menyimpannya ke bidang yang sesuai.
Berikut adalah hasil akhir pada database.
log.info("Preloading " + repository.save(new Employee("Bilbo", "Baggins", "burglar")));
log.info("Preloading " + repository.save(new Employee("Frodo", "Baggins", "thief")));
Itulah penjelasan terkait dengan REST API dan cara membuatnya. Anda dapat mengubah kode-kode yang ada di sini sesuaikan dengan kebutuhan Anda. Selamat mencoba.
Jangan lupa kunjungi Web App di https://appkey.id/ dan dapatkan berbagai indormasi terbaru tentang game development.
Jasa Pembuatan Aplikasi, Website dan Internet Marketing | PT APPKEY
PT APPKEY adalah perusahaan IT yang khusus membuat aplikasi Android, iOS dan mengembangkan sistem website. Kami juga memiliki pengetahuan dan wawasan dalam menjalankan pemasaran online sehingga diharapkan dapat membantu menyelesaikan permasalahan Anda.