API adalah singkatan dari Application Programming Interface yaitu sebuah software
yang memungkinkan para developer untuk mengintegrasikan dan mengizinkan dua aplikasi yang
berbeda secara bersamaan untuk saling terhubung satu sama lain.
Tujuan penggunaan dari API adalah untuk saling berbagi data antar aplikasi yang berbeda
tersebut, dan juga untuk mempercepat proses pengembangan aplikasi dengan cara menyediakan
sebuah function yang terpisah sehingga para developer tidak perlu lagi membuat fitur yang
serupa.
REST API merupakan salah satu dari desain arsitektur yang terdapat di dalam API itu
sendiri. Dan cara kerja dari RESTful API yaitu REST client akan Melakukan akses pada
data/resource pada REST server dimana masing-masing resource. Atau data/resource tersebut
akan dibedakan oleh sebuah global ID atau URIs (Universal Resource Identifiers).
Jadi, Nantinya data yang diberikan oleh REST server itu bisa berupa format text, JSON atau
XML. Dan saat ini format yang paling populer dan paling banyak digunakan adalah format
JSON.
Adapun metode HTTP yang secara umum dipakai dalam REST api adalah:
• GET, berfungsi untuk membaca data/resource dari REST server
• POST, berfungsi untuk membuat sebuah data/resource baru di REST server
• PUT, berfungsi untuk memperbaharui data/resource di REST server
• DELETE, berfungsi untuk menghapus data/resource dari REST serve
• OPTIONS, berfungsi untuk mendapatkan operasi yang disupport pada resource dari
REST server.
Retrofit adalah sebuah library android yang membantu pengembang untuk melakukan
request ke sebuah endpoint REST API. Library ini dikembangkan oleh Square Inc
(https://github.com/square) sebuah perusahaan yang berbasis di Amerika Serikat. Library ini
menyederhanakan kode program yang digunakan untuk mengakses REST API. Tidak hanya untuk
mengakses REST API dengan proses sederhana (GET, POST, PUT, DELETE) retrofit juga
mendukung berbagai macam format authentikasi via http, menambahkan header pada request,
menambahkan parameter serta mengirim data berupa image ke server.
Untuk mengakses REST api dengan kode program bawaan android seorang programmer
harus membuat banyak worker dan thread menggunakan Async Task. Hal ini bukan sebuah proses
yang sederhana, apalagi jika request terhadap API tersebut menuntut adanya security, parameter
khusus yang harus ditambahkan atau bahkan mengirim data selain text contoh berupa gambar ke
server. Jika menggunakan Async Task dapat dipastikan programmer akan kesulitan dalam
membuat program. Akan lebih baik jika semua proses yang berhubungan dengan networking
tersebut ditangani oleh Retrofit. kita akan mencoba mengambil data dari
http://www.omdbapi.com/?s=batman&apikey=2268147d.
Langkah Praktikum REST API
Kemudian untuk kebutuhan library aplikasi yang akan dibuat, maka perlu ditambahkan
beberapa implementasi pada build.gradle, namun jika sudah ada di projeck kalian tidak perlu
ditambahkan, untuk versinya menyesuaikan saja.
//recyclerview
implementation 'androidx.recyclerview:recyclerview:1.0.0'
//Butterknife
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3'
implementation 'com.jakewharton:butterknife:10.2.3'
//httpclient
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
//Imageloader
implementation 'com.github.bumptech.glide:glide:4.12.0'
Karena aplikasi kita membutuhkan koneksi internet untuk mengakses API, maka aplikasi
harus diijinkan untuk mengakses internet. Silakan buka file manifest dan tambahkan kode uses-
permission.
3. Install Plugin RoboPOJOGenerator, buka File->Settings->Plugins - >Browse
repositories -> lalu ketikan RoboPojoGenerator -> install, Plugin untuk
membantu kita membuat class POJO dari JSON.
Setelah selesai restart android studionya.
4. Kita akan mengambil data-data JSON nya dari
http://www.omdbapi.com/?s=batman&apikey=2268147d
5. Buka url tersebut lalu copy semua data-data nya
6. Lalu kita generate data JSON tersebut menjadi object (POJO) dengan cara klik
kanan di package aplikasi à New à Generate POJO from
JSON
7. Paste data json disini, Framework pilih none, centang create setters dan
getters, kemudian Root object name buat MovieResponse, setelah itu pilih
Generate.
MovieResponse.java
public class MovieResponse{
private String response;
private String totalResults;
private List<SearchItem> search;
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list_movies"
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.recyclerview.widget.RecyclerView>
</RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_weight="1"
android:padding="10dp">
<de.hdodenhof.circleimageview.CircleImageView
android:layout_width="90dp"
android:layout_height="90dp"
android:id="@+id/img_poster"
app:civ_border_width="2dp"
android:src="@mipmap/ic_launcher"/>
<TextView
android:id="@+id/title_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@id/img_poster"
android:textSize="24sp"
android:text="Judul" />
<TextView
android:id="@+id/realesed_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:layout_below="@id/title_view"
android:layout_toRightOf="@id/img_poster"
android:textSize="24sp"
android:text="2000" />
<TextView
android:id="@+id/genre_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/img_poster"
android:textSize="24sp"
android:layout_below="@id/realesed_view"
android:layout_marginLeft="12dp"
android:text="Action" />
</RelativeLayout>
10. Selanjutnya kita buat class baru untuk adapternya, dengan nama MovieAdapter,
kemudian tambahkan kode seperti berikut, lihat gambar
extends RecyclerView.Adapter<MovieAdapter.ViewHolder>
Kemudian alt+enter pada RecyclerView, kemudian alt+enter pada class tersebut pilih
implement methods. Lihat Gambar.
Maka kode akan berubah seperti ini, tinggal menambahkan beberapa kode sesuai
berikut. Jika masih bergaris merah tinggal alt+enter pilih pilihan teratas.
MovieAdapter.java
public class MovieAdapter extends RecyclerView.Adapter<MovieAdapter.ViewHolder>
{
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int
viewType) {
LayoutInflater layoutInflater =
LayoutInflater.from(parent.getContext());
View view = layoutInflater.inflate(R.layout.movie_adapter, parent,
false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int
position) {
holder.title_view.setText(listMovies.get(position).getTitle());
holder.released_view.setText(listMovies.get(position).getYear());
holder.genre_view.setText(listMovies.get(position).getType());
Glide.with(holder.itemView.getContext()).load(listMovies.get(position).getPoste
r()).into(holder.img_poster);
@Override
public int getItemCount() {
return listMovies.size();
}
@BindView(R.id.img_poster)
CircleImageView img_poster;
@BindView(R.id.title_view)
TextView title_view;
@BindView(R.id.realesed_view)
TextView released_view;
@BindView(R.id.genre_view)
TextView genre_view;
}
}
}
11. Langkah selanjutnya adalah membuat sebuah interface dengan nama MovieService.java,
dengan cara klik kanan project pilih new à Java Class à Interface.
Di dalam interface ini berisi kumpulan service yang dibutuhkan oleh client (Android) dalam
berkomunikasi dengan server.
public interface MovieService {
@GET("/JSONParsingTutorial/jsonMovie")
Call<MovieService> getMovies();
12. RestClient.java
Selanjutnya kita buat class baru untuk object retrofit nya, dimana objek ini yang
bertanggung jawab menambahkan baseUrl dan jenis converter yang digunakan. Kenapa harus
ada converter dimunculkan di sini? server akan mengirimkan JSON Object sebagai bentuk
respon nya. Ketika sudah sampai ke HP Android, maka Android tidak bisa membaca JSON,
Android hanya bisa membaca data dalam format Java. Oleh karena itu diperlukan sebuah
converter untuk merubah JSON menjadi java
}
}
13. MainActivity,java
Dan yang terakhir kita tampilkan data-data nya di mainactivity
@BindView(R.id.list_movies)
RecyclerView listMovies;
MovieAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
@Override
public void onResponse(Call<MovieResponse> call,
Response<MovieResponse> response) {
adapter.listMovies.addAll(response.body().getSearch());
adapter.notifyDataSetChanged();
}
@Override
public void onFailure(Call<MovieResponse> call, Throwable t) {
Toast.makeText(MainActivity.this,t.getMessage(),Toast.LENGTH_SHORT).show();
}
};
}