Skip to main content

Contoh Menggunakan API Dan Fetch di dalam Web Sederhana

Apakah Anda sudah berhasil menerapkan Fetch dalam menampilkan data dari API TheSportDB? Jika belum, yuk kita lakukan bersama-sama!
Pada dokumentasi API menyebutkan bahwa, untuk mendapatkan daftar klub olahraga kita dapat menggunakan target url: https://www.thesportsdb.com/api/v1/json/1/searchteams.php?t=Arsenal
2020031323502200000abb4fd3bf7637506d2872ff1cb0.png
Sebelum menuliskan langsung pada proyek dengan fetch, biasakan ketika hendak mengkonsumsi API biasakan untuk mencobanya menggunakan aplikasi Postman terlebih dahulu. Jika target url tersebut diakses melalui Postman dengan GET Request, maka akan menghasilkan response dengan struktur JSON yang tampak pada tab Body.
202003132350321a588cd4b3f0285be6fd1af52fa3591e.png
Pada response JSON yang dihasilkan menampung satu key dengan nama teams yang memiliki value berupa sebuah array. Di dalam array tersebut menampilkan banyak data terkait klub olahraga yang memiliki nama Arsenal. Kita dapat memanfaatkan key strTeam untuk mendapatkan nama klub, strTeamBadge untuk mendapatkan logo klub, dan strDescriptionEN untuk mendapatkan deskripsi singkat dalam bahasa inggris.
Lantas untuk mencari data team berdasarkan kata kunci lain kita dapat mengubah kata “Arsenal” menggunakan kata kunci yang kita inginkan, misalnya “Barcelona”. Sehingga melakukan request terhadap url: https://www.thesportsdb.com/api/v1/json/1/searchteams.php?t=Barcelona akan menghasilkan response JSON dengan informasi klub olahraga terkait “Barcelona”.
20200313235048e7906db6f58df01a750d175c26f3b342.png
Cukup mudah bukan untuk menggunakan API tersebut?
Nah, Setelah memahami cara penggunaan API-nya, sekarang mari kita mulai tuliskan fungsi fetch pada proyek Club Finder. Langkah awal buka kembali proyek Club Finder pada text editor yang Anda gunakan.
202003132351017c49f82cb83c52af812adb0b076cc23f.png
Kemudian buka berkas data-source.js pada src -> script -> data -> data-source.js. Kita refactor fungsi searchClub dengan menghapus seluruh logika yang ada di dalamnya, kemudian tuliskan fungsi fetch seperti ini:

  1. class DataSource {

  2.    static searchClub(keyword) {

  3.        return fetch(`https://www.thesportsdb.com/api/v1/json/1/searchteams.php?t=${keyword}`)

  4.    }

  5. }

  6.  

  7. export default DataSource;


Seperti yang sudah kita ketahui, fungsi fetch() akan mengembalikan promise resolve jika request berhasil dilakukan. Maka untuk menangani respon dari request yang dibuat, kita gunakan .then() yang di dalamnya berisi variabel response sebagai response object yang didapat.

  1. class DataSource {

  2.    static searchClub(keyword) {

  3.        return fetch(`https://www.thesportsdb.com/api/v1/json/1/searchteams.php?t=${keyword}`)

  4.        .then(response => {

  5.           

  6.        })

  7.    }

  8. }

  9.  

  10. export default DataSource;


Kemudian di dalam blok then tersebut, kita ubah nilai response menjadi JSON dengan memanggil method response.json().

  1. class DataSource {

  2.    static searchClub(keyword) {

  3.        return fetch(`https://www.thesportsdb.com/api/v1/json/1/searchteams.php?t=${keyword}`)

  4.        .then(response => {

  5.            return response.json();

  6.        })

  7.    }

  8. }

  9.  

  10. export default DataSource;


Karena method response.json() juga mengembalikan nilai promise, maka untuk mendapatkan nilai yang dibawa oleh resolve kita perlu menambahkan .then lainnya (chaining promise). Di dalam .then yang kedua ini, berikan parameter dengan nama responseJson (penamaan variabel tidaklah baku, namun gunakan penamaan yang menunjukkan arti dari nilai variabelnya).

  1. class DataSource {

  2.    static searchClub(keyword) {

  3.        return fetch(`https://www.thesportsdb.com/api/v1/json/1/searchteams.php?t=${keyword}`)

  4.        .then(response => {

  5.            return response.json();

  6.        })

  7.        .then(responseJson => {

  8.           

  9.        })

  10.    }

  11. }

  12.  

  13. export default DataSource;


responseJson merupakan nilai JSON yang dihasilkan dari perubahan object response dalam bentuk JSON melalui method .json() tadi.
Di dalam block .then yang kedua, kita kembalikan (return) dengan nilai promise resolve dengan membawa nilai jsonResponse.teams jika nilai array tidak null. Namun jika teams bernilai null, maka kembalikan dengan nilai promise reject dengan membawa nilai “${keyword} is not found”.

  1. class DataSource {

  2.    static searchClub(keyword) {

  3.        return fetch(`https://www.thesportsdb.com/api/v1/json/1/searchteams.php?t=${keyword}`)

  4.        .then(response => {

  5.            return response.json();

  6.        })

  7.        .then(responseJson => {

  8.            if(responseJson.teams) {

  9.                return Promise.resolve(responseJson.teams);

  10.            } else {

  11.                return Promise.reject(`${keyword} is not found`);

  12.            }

  13.        })

  14.    }

  15. }

  16.  

  17. export default DataSource;


Simpan perubahan tersebut dan jalankan aplikasi dalam mode development menggunakan perintah:

  1. npm run start-dev


Setelah proyek terbuka, lakukan pencarian dengan keyword apapun yang Anda mau, di sini kita contohkan dengan “Barcelona”.
20200313235133e90126ea84a6df29dc44b91c4f296331.png
Yah, data yang ditampilkan undefined. Mengapa bisa demikian? Ini disebabkan karena kita belum menyesuaikan key berdasarkan response yang didapat dari public API. Kita harus menggunakan key strTeam untuk mendapatkan nama klub, strTeamBadge untuk mendapatkan logo klub, dan strDescriptionEN untuk mendapatkan deskripsi singkat dalam bahasa inggris.
Ketiga key tersebut kita tetapkan pada berkas src -> script -> component -> club-item.js. Lebih tepatnya pada fungsi render.

  1. render() {

  2.        this.shadowDOM.innerHTML = `

  3.            <style>

  4.                 ……..

  5.            </style>

  6.            <img class="fan-art-club" src="${this._club.fanArt}" alt="Fan Art">

  7.            <div class="club-info">

  8.                <h2>${this._club.name}</h2>

  9.                <p>${this._club.description}</p>

  10.            </div>`;

  11.    }


Kita ubah properti this._club.fanArt menjadi this._club.strTeamBadgethis._club.name menjadi this._club.strTeam, dan this._club.description menjadi this._club.strDescriptionEN.
Sehingga fungsi render akan menjadi seperti ini:

  1. render() {

  2.        this.shadowDOM.innerHTML = `

  3.            <style>

  4.                * {

  5.                    margin: 0;

  6.                    padding: 0;

  7.                    box-sizing: border-box;

  8.                }

  9.                :host {

  10.                    display: block;

  11.                    margin-bottom: 18px;

  12.                    box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);

  13.                    border-radius: 10px;

  14.                    overflow: hidden;

  15.                }

  16.               

  17.                .fan-art-club {

  18.                    width: 100%;

  19.                    max-height: 300px;

  20.                    object-fit: cover;

  21.                    object-position: center;

  22.                }

  23.               

  24.                .club-info {

  25.                    padding: 24px;

  26.                }

  27.               

  28.                .club-info > h2 {

  29.                    font-weight: lighter;

  30.                }

  31.               

  32.                .club-info > p {

  33.                    margin-top: 10px;

  34.                    overflow: hidden;

  35.                    text-overflow: ellipsis;

  36.                    display: -webkit-box;

  37.                    -webkit-box-orient: vertical;

  38.                    -webkit-line-clamp: 10; /* number of lines to show */

  39.                }

  40.            </style>

  41.            <img class="fan-art-club" src="${this._club.strTeamBadge}" alt="Fan Art">

  42.            <div class="club-info">

  43.                <h2>${this._club.strTeam}</h2>

  44.                <p>${this._club.strDescriptionEN}</p>

  45.            </div>`;

  46. }


Simpan kembali perubahan kode yang dituliskan kemudian lakukan pencarian kembali pada aplikasi Club Finder. Seharusnya sekarang aplikasi sudah bisa menampilkan data dengan baik.
202003132351502bc06712f0552fa6f26e8f8de5607033.png
Voila! Anda sudah berhasil menerapkan Fetch pada proyek Club Finder.

Comments

Popular posts from this blog

5 Kafe & Bakery Halal di Area Bugis Singapura

Fluff Bakery, Muslim Owned Beberapa tahun belakangan ini banyak muncul kafe dan bakery trendi di Singapura yang dikelola oleh anak-anak muda. Kabar gembira buat kita semua, banyak yang pemiliknya muslim. Jadi meskipun belum memiliki sertifikat halal, bahan-bahan makanan yang mereka gunakan halal semua. Beberapa kafe halal nan trendi tersebut terkonsentrasi di area Bugis, atau sering juga disebut sebagai Arab Quarter atau Kampong Glam. Area Bugis, di antara stasiun MRT Bugis dan MRT Lavender, memang pilihan utama sebagai base camp untuk traveler muslim. Di sini gampang dijumpai restoran, kafe, dan bakery halal. Dua pilihan restoran halal untuk makan besar (makan nasi) adalah Zam-Zam dan Hjh Maimunah . Zam-Zam lokasinya di 679 North Bridge Rd, persis di seberang Masjid Sultan. Resto ini menyajikan masakan India. Coba deh murtabak-nya yang terkenal enak banget. Sementara restoran Hjh Maimunah adalah salah satu restoran halal yang mendapat Michelin Star (peringkat untuk restoran yang bagu

Call : 085813134112 Jasa Fogging Nyamuk di Jatiasih Bekasi

Call : 085813134112 Jasa Fogging Nyamuk di Jatiasih Bekasi , Jasa Pembasmi Kecoa di Medan Satria Bekasi, Jasa Pembasmi Cicak di Mustika Jaya Bekasi, Jasa Pembasmi Tawon di Pondok Melati Bekasi, Jasa Pembasmi Tomcat di Rawalumbu Bekasi, Jatisampurna Bekasi, Pondok Gede Bekasi. Garda Pest Control juga hadir diberbagai Kota lainnya seperti Jasa Fogging Nyamuk di Bali, Jasa Pembasmi Tawon di Cirebon, Jasa Pembasmi Kutu Kucing di Kemang, Jasa Pembasmi Tikus di Bogor, Jasa Pembasmi Kutu Anjing di Bandung, Jakarta Barat, Tangerang Selatan, Makassar, Palembang, Surabaya, Solo dll. Penyakit demam berdarah disebabkan oleh virus dengue yang diketahui memiliki empat serotipe virus dengue, di antaranya DEN-1, DEN-2, DEN-3, dan DEN-4. Di Indonesia sendiri, virus ini ditularkan oleh dua jenis nyamuk demam berdarah betina, yaitu Aedes aegypti sebagai vektor utama dan Aedes albopictus sebagai vektor sekunder. Jenis nyamuk demam berdarah ini memiliki sifat anthropofilik, artinya

Tip Belanja Belanji di Sydney

Window display di QVB Setahun sekali di Sydney, ada hari khusus untuk berbelanja gila-gilaan, ketika SEMUA toko menawarkan diskon. Mereka menyebutnya Boxing Day . Saya menyebutnya Hari Raya Berbelanja :) Boxing Day dirayakan setiap tanggal 26 Desember, satu hari setelah Natal. Tadinya saya pikir Boxing Day ini berkaitan dengan 'tinju', tapi tinju yang bagaimana? Ternyata bukaaan. Pada awalnya, Boxing Day ini diramaikan dengan memberikan hadiah (natal) untuk orang-orang miskin, yang dikemas dalam kotak (box). Tapi maknanya kemudian bergeser menjadi hari belanja untuk menghabiskan uang lebaran atau angpao :) Biasanya, sebelum datang tanggal ini, orang-orang sudah mengincar apa yang ingin mereka beli pada Boxing Day. Katalog SALE bisa dilihat di internet, website masing-masing toko atau di Lasoo . Pasukan belanja sampai mati ini biasanya mengincar merk-merk terkenal, gaun-gaun disainer yang hanya memberi diskon setahun sekali pada hari tersebut. Nggak heran kalau mereka sampai bel