Wednesday

18-06-2025 Vol 19

Mastering API Integration in React Native for High-Performance Apps

Mastering API Integration in React Native for High-Performance Apps

React Native telah menjadi kerangka kerja pilihan untuk membangun aplikasi seluler lintas platform. Salah satu aspek penting dalam pengembangan aplikasi modern adalah integrasi dengan Application Programming Interfaces (API). API memungkinkan aplikasi Anda untuk berinteraksi dengan layanan eksternal, mengambil data, dan melakukan berbagai fungsi. Menguasai integrasi API dalam React Native sangat penting untuk membangun aplikasi berperforma tinggi, kaya fitur, dan andal. Artikel ini akan membahas secara mendalam berbagai teknik, praktik terbaik, dan alat untuk mengintegrasikan API secara efektif dalam React Native.

Table of Contents

  1. Introduction to API Integration in React Native
    • What are APIs and why are they important?
    • Why integrate APIs in React Native?
    • Overview of popular APIs used in React Native apps
  2. Setting Up Your React Native Environment
    • Creating a new React Native project
    • Installing necessary dependencies
    • Configuring network permissions
  3. Choosing the Right HTTP Client
    • Fetch API vs. Axios
    • Comparing features and performance
    • When to use which client
  4. Making Basic API Requests
    • GET requests
    • POST requests
    • PUT requests
    • DELETE requests
    • Handling different response types (JSON, XML, etc.)
  5. Handling API Authentication
    • Authentication methods (API keys, OAuth 2.0, JWT)
    • Storing and managing tokens securely
    • Implementing token refresh strategies
  6. Data Transformation and Management
    • Parsing API responses
    • Transforming data for UI display
    • Using state management libraries (Redux, Context API, MobX) for data persistence
  7. Error Handling and Debugging
    • Handling network errors
    • Handling API errors (status codes, error messages)
    • Implementing retry mechanisms
    • Using debugging tools (React Native Debugger, Flipper)
  8. Optimizing API Integration for Performance
    • Caching API responses
    • Implementing pagination for large datasets
    • Using background tasks for long-running operations
    • Debouncing and throttling API calls
  9. Testing API Integration
    • Unit testing API calls
    • Integration testing with mock APIs
    • End-to-end testing with real APIs
  10. Best Practices for API Integration in React Native
    • Writing clean and maintainable code
    • Following API documentation
    • Handling rate limiting
    • Securing API keys
  11. Advanced API Integration Techniques
    • WebSockets for real-time data
    • GraphQL for efficient data fetching
    • Server-Sent Events (SSE)
  12. Case Studies: Successful API Integrations in React Native Apps
    • Examples of high-performance apps using APIs
    • Lessons learned from real-world projects
  13. Conclusion
    • Recap of key takeaways
    • Future trends in API integration for React Native

1. Introduction to API Integration in React Native

Dalam lanskap pengembangan aplikasi modern, Application Programming Interfaces (API) memainkan peran penting. Mereka bertindak sebagai jembatan yang memungkinkan berbagai perangkat lunak berkomunikasi dan bertukar data. Dalam konteks React Native, mengintegrasikan API membuka banyak kemungkinan, memungkinkan aplikasi Anda mengakses layanan eksternal, mengambil data real-time, dan menawarkan pengalaman pengguna yang dinamis dan kaya.

What are APIs and why are they important?

API adalah seperangkat aturan dan spesifikasi yang memungkinkan aplikasi perangkat lunak yang berbeda untuk berkomunikasi dan berinteraksi satu sama lain. Mereka mendefinisikan metode dan format data yang dapat digunakan aplikasi untuk meminta dan bertukar informasi.

API penting karena:

  • Enable Interoperability: API memungkinkan berbagai sistem dan aplikasi untuk bekerja sama tanpa memerlukan pemahaman mendalam tentang implementasi internal satu sama lain.
  • Promote Modularity: API memungkinkan pengembang untuk menggunakan kembali kode yang sudah ada dan fungsionalitas yang disediakan oleh layanan lain, daripada membangun semuanya dari awal.
  • Drive Innovation: API memungkinkan pengembang untuk membuat aplikasi baru yang inovatif dengan menggabungkan fungsi dari berbagai layanan dan sumber data.
  • Enhance User Experience: API memungkinkan aplikasi untuk menyediakan konten real-time, data personalisasi, dan layanan yang disempurnakan, menghasilkan pengalaman pengguna yang lebih baik.

Why integrate APIs in React Native?

Mengintegrasikan API dalam React Native sangat penting untuk membangun aplikasi modern, berperforma tinggi, karena beberapa alasan:

  • Access to External Data: API menyediakan akses ke sejumlah besar data dari berbagai sumber, seperti database, media sosial, layanan cuaca, dan banyak lagi. Ini memungkinkan aplikasi Anda untuk menyediakan konten yang relevan dan terkini kepada pengguna.
  • Enhanced Functionality: API memungkinkan Anda untuk mengintegrasikan fitur-fitur canggih ke dalam aplikasi Anda, seperti pemrosesan pembayaran, layanan lokasi, otentikasi, dan pemberitahuan push, tanpa harus mengimplementasikan semuanya sendiri.
  • Cross-Platform Compatibility: React Native adalah kerangka kerja lintas platform, dan API memungkinkan Anda untuk berbagi logika dan fungsionalitas bisnis yang sama di berbagai platform (iOS dan Android), mengurangi upaya pengembangan dan waktu ke pasar.
  • Scalability and Maintainability: Dengan menggunakan API, Anda dapat membagi aplikasi Anda menjadi komponen-komponen yang lebih kecil dan independen, membuatnya lebih mudah untuk di-scale, dipelihara, dan diperbarui.

Overview of popular APIs used in React Native apps

Ada ribuan API yang tersedia untuk berbagai tujuan. Berikut adalah beberapa API populer yang umum digunakan dalam aplikasi React Native:

  • REST APIs: Ini adalah API berbasis web yang menggunakan protokol HTTP untuk berkomunikasi. Mereka adalah jenis API yang paling umum dan banyak digunakan untuk mengambil dan memanipulasi data. Contohnya termasuk API REST yang disediakan oleh Google, Facebook, Twitter, dan banyak lagi.
  • GraphQL APIs: GraphQL adalah bahasa query untuk API yang memungkinkan klien untuk meminta hanya data yang mereka butuhkan, mengurangi pengiriman data berlebihan dan meningkatkan kinerja.
  • Firebase APIs: Firebase adalah platform pengembangan aplikasi seluler yang menyediakan berbagai layanan, termasuk database real-time, otentikasi, penyimpanan cloud, dan banyak lagi.
  • Third-Party APIs: Ada banyak API pihak ketiga yang tersedia untuk berbagai tujuan, seperti pemrosesan pembayaran (Stripe, PayPal), layanan lokasi (Google Maps, Mapbox), dan integrasi media sosial (Facebook, Twitter).

2. Setting Up Your React Native Environment

Sebelum Anda mulai mengintegrasikan API ke dalam aplikasi React Native Anda, Anda perlu menyiapkan lingkungan pengembangan Anda. Ini termasuk membuat proyek React Native baru, menginstal dependensi yang diperlukan, dan mengkonfigurasi izin jaringan.

Creating a new React Native project

Untuk membuat proyek React Native baru, Anda dapat menggunakan React Native CLI (Command Line Interface). Buka terminal Anda dan jalankan perintah berikut:

npx react-native init MyAwesomeApp

Ini akan membuat direktori baru bernama “MyAwesomeApp” dengan struktur proyek React Native dasar. Setelah proyek selesai dibuat, navigasikan ke direktori proyek:

cd MyAwesomeApp

Installing necessary dependencies

Selanjutnya, Anda perlu menginstal dependensi yang diperlukan untuk integrasi API. Dua pustaka populer untuk membuat permintaan HTTP di React Native adalah fetch (built-in) dan axios. Kami akan membahas keduanya nanti. Untuk saat ini, mari kita instal axios:

npm install axios

Atau, jika Anda menggunakan Yarn:

yarn add axios

Anda juga mungkin perlu menginstal dependensi lain, tergantung pada kebutuhan proyek Anda. Misalnya, jika Anda berencana untuk menggunakan Redux untuk manajemen status, Anda perlu menginstal pustaka redux dan react-redux.

Configuring network permissions

Sebelum aplikasi Anda dapat membuat permintaan jaringan, Anda perlu mengkonfigurasi izin jaringan yang diperlukan. Proses ini sedikit berbeda untuk iOS dan Android.

Android

Di Android, Anda perlu menambahkan izin INTERNET ke file AndroidManifest.xml Anda. File ini biasanya terletak di android/app/src/main/AndroidManifest.xml. Buka file dan tambahkan baris berikut di dalam tag <manifest>:

<uses-permission android:name="android.permission.INTERNET" />
  

Jika Anda menargetkan Android 9 (API level 28) atau lebih tinggi, Anda juga perlu mengaktifkan lalu lintas HTTP yang tidak terenkripsi. Secara default, Android 9 dan yang lebih tinggi hanya mengizinkan koneksi HTTPS yang aman. Untuk mengizinkan koneksi HTTP yang tidak terenkripsi, tambahkan atribut android:usesCleartextTraffic="true" ke tag <application> di file AndroidManifest.xml:

<application
      android:name=".MainApplication"
      android:label="@string/app_name"
      android:icon="@mipmap/ic_launcher"
      android:roundIcon="@mipmap/ic_launcher_round"
      android:allowBackup="false"
      android:theme="@style/AppTheme"
      android:usesCleartextTraffic="true">
  

Catatan: Mengaktifkan lalu lintas cleartext harus hanya untuk tujuan pengembangan atau ketika Anda memiliki alasan khusus untuk melakukannya. Dalam lingkungan produksi, selalu gunakan HTTPS untuk keamanan.

iOS

Di iOS, Anda perlu menambahkan pengecualian App Transport Security (ATS) ke file Info.plist Anda. File ini biasanya terletak di ios/YourAppName/Info.plist. Buka file sebagai kode sumber dan tambahkan yang berikut:

<key>NSAppTransportSecurity</key>
  <dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
  </dict>
  

Ini akan memungkinkan aplikasi Anda untuk membuat koneksi HTTP ke domain apa pun. Namun, ini tidak dianjurkan untuk lingkungan produksi. Sebaliknya, Anda harus menentukan domain tertentu yang ingin Anda izinkan. Untuk melakukan ini, ganti NSAllowsArbitraryLoads dengan domain tertentu:

<key>NSAppTransportSecurity</key>
  <dict>
    <key>NSExceptionDomains</key>
    <dict>
      <key>example.com</key>
      <dict>
        <key>NSIncludesSubdomains</key>
        <true/>
        <key>NSExceptionAllowsInsecureHTTPLoads</key>
        <true/>
      </dict>
    </dict>
  </dict>
  

Ganti example.com dengan domain API Anda. Ini akan memungkinkan aplikasi Anda untuk membuat koneksi HTTP yang tidak aman ke domain itu saja.

3. Choosing the Right HTTP Client

Saat mengintegrasikan API di React Native, Anda memerlukan klien HTTP untuk membuat permintaan ke server. React Native dilengkapi dengan Fetch API bawaan, tetapi ada juga pustaka pihak ketiga seperti Axios yang populer dan menawarkan fitur tambahan.

Fetch API vs. Axios

Fetch API

Fetch API adalah antarmuka modern untuk membuat permintaan jaringan di JavaScript. Ini didasarkan pada Promises dan menyediakan cara yang lebih fleksibel dan kuat untuk mengambil sumber daya dari server daripada XMLHttpRequest yang lama.

Kelebihan:

  • Built-in React Native, tidak ada instalasi yang diperlukan.
  • Antarmuka berbasis Promise modern.
  • Dukungan untuk streaming respons.

Kekurangan:

  • Tidak secara otomatis menolak respons HTTP dengan kode status kesalahan (misalnya, 404, 500). Anda perlu memeriksanya secara manual.
  • Tidak menyediakan cara bawaan untuk membatalkan permintaan.
  • Kurang dukungan untuk kemajuan unggahan.

Axios

Axios adalah klien HTTP berbasis Promise untuk browser dan Node.js. Ini adalah pustaka populer di kalangan pengembang React Native karena kesederhanaan, fitur-fiturnya, dan komunitas yang kuat.

Kelebihan:

  • Transformasi otomatis respons JSON.
  • Menolak respons HTTP dengan kode status kesalahan secara otomatis.
  • Dukungan untuk membatalkan permintaan.
  • Dukungan untuk kemajuan unggahan.
  • Dukungan untuk perlindungan XSRF.
  • Intercept permintaan dan respons.

Kekurangan:

  • Perlu menginstal pustaka secara terpisah.

Comparing features and performance

Berikut adalah perbandingan fitur dan kinerja antara Fetch API dan Axios:

Feature Fetch API Axios
Built-in Yes No
Promise-based Yes Yes
Automatic JSON transformation No (requires response.json()) Yes
Error handling Requires manual check Automatic rejection for error status codes
Request cancellation No Yes
Upload progress Limited Yes
Interceptors No Yes
XSRF protection No Yes

Dalam hal kinerja, Fetch API dan Axios umumnya setara. Namun, Axios dapat memberikan kinerja yang lebih baik dalam kasus-kasus tertentu, seperti ketika bekerja dengan respons JSON besar, karena transformasi JSON otomatisnya.

When to use which client

Pilihan antara Fetch API dan Axios tergantung pada kebutuhan dan preferensi khusus Anda.

  • Use Fetch API if:
    • Anda ingin menggunakan klien HTTP built-in tanpa dependensi tambahan.
    • Anda tidak memerlukan fitur lanjutan seperti pembatalan permintaan, kemajuan unggahan, atau interceptor.
  • Use Axios if:
    • Anda menginginkan klien HTTP yang lebih canggih dengan fitur-fitur seperti pembatalan permintaan, kemajuan unggahan, dan interceptor.
    • Anda ingin transformasi JSON otomatis dan penanganan kesalahan yang lebih baik.
    • Anda sudah menggunakan Axios dalam proyek lain dan ingin mempertahankan konsistensi.

Untuk sebagian besar aplikasi React Native, Axios adalah pilihan yang baik karena menyediakan lebih banyak fitur dan kemudahan penggunaan.

4. Making Basic API Requests

Setelah Anda memilih klien HTTP, Anda dapat mulai membuat permintaan API. Bagian ini akan membahas cara membuat berbagai jenis permintaan (GET, POST, PUT, DELETE) menggunakan Fetch API dan Axios.

GET requests

Permintaan GET digunakan untuk mengambil data dari server. Untuk membuat permintaan GET menggunakan Fetch API, Anda dapat menggunakan kode berikut:

fetch('https://api.example.com/users')
    .then(response => {
      if (!response.ok) {
        throw new Error('Network response was not ok');
      }
      return response.json();
    })
    .then(data => {
      console.log(data);
    })
    .catch(error => {
      console.error('There was a problem with the fetch operation:', error);
    });
  

Untuk membuat permintaan GET menggunakan Axios, Anda dapat menggunakan kode berikut:

axios.get('https://api.example.com/users')
    .then(response => {
      console.log(response.data);
    })
    .catch(error => {
      console.error('There was an error fetching the data:', error);
    });
  

POST requests

Permintaan POST digunakan untuk mengirim data ke server untuk membuat sumber daya baru. Untuk membuat permintaan POST menggunakan Fetch API, Anda dapat menggunakan kode berikut:

fetch('https://api.example.com/users', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      name: 'John Doe',
      email: 'john.doe@example.com'
    })
  })
  .then(response => {
    if (!response.ok) {
      throw new Error('Network response was not ok');
    }
    return response.json();
  })
  .then(data => {
    console.log(data);
  })
  .catch(error => {
    console.error('There was a problem with the fetch operation:', error);
  });
  

Untuk membuat permintaan POST menggunakan Axios, Anda dapat menggunakan kode berikut:

axios.post('https://api.example.com/users', {
    name: 'John Doe',
    email: 'john.doe@example.com'
  })
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error('There was an error creating the user:', error);
  });
  

PUT requests

Permintaan PUT digunakan untuk memperbarui sumber daya yang ada di server. Untuk membuat permintaan PUT menggunakan Fetch API, Anda dapat menggunakan kode berikut:

fetch('https://api.example.com/users/123', {
    method: 'PUT',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      name: 'Jane Doe',
      email: 'jane.doe@example.com'
    })
  })
  .then(response => {
    if (!response.ok) {
      throw new Error('Network response was not ok');
    }
    return response.json();
  })
  .then(data => {
    console.log(data);
  })
  .catch(error => {
    console.error('There was a problem with the fetch operation:', error);
  });
  

Untuk membuat permintaan PUT menggunakan Axios, Anda dapat menggunakan kode berikut:

axios.put('https://api.example.com/users/123', {
    name: 'Jane Doe',
    email: 'jane.doe@example.com'
  })
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error('There was an error updating the user:', error);
  });
  

DELETE requests

Permintaan DELETE digunakan untuk menghapus sumber daya dari server. Untuk membuat permintaan DELETE menggunakan Fetch API, Anda dapat menggunakan kode berikut:

fetch('https://api.example.com/users/123', {
    method: 'DELETE'
  })
  .then(response => {
    if (!response.ok) {
      throw new Error('Network response was not ok');
    }
    console.log('User deleted successfully');
  })
  .catch(error => {
    console.error('There was a problem with the fetch operation:', error);
  });
  

Untuk membuat permintaan DELETE menggunakan Axios, Anda dapat menggunakan kode berikut:

axios.delete('https://api.example.com/users/123')
  .then(response => {
    console.log('User deleted successfully');
  })
  .catch(error => {
    console.error('There was an error deleting the user:', error);
  });
  

Handling different response types (JSON, XML, etc.)

API dapat mengembalikan data dalam berbagai format, seperti JSON, XML, atau text biasa. Klien HTTP Anda harus dapat menangani format respons yang berbeda.

JSON

JSON (JavaScript Object Notation) adalah format data yang paling umum digunakan untuk API. Fetch API dan Axios secara otomatis menangani respons JSON.

Dengan Fetch API, Anda perlu menggunakan metode response.json() untuk mengurai respons JSON:

fetch('https://api.example.com/users')
    .then(response => response.json())
    .then(data => {
      console.log(data);
    });
  

Axios secara otomatis mengubah respons JSON, sehingga Anda dapat langsung mengakses data menggunakan response.data:

axios.get('https://api.example.com/users')
    .then(response => {
      console.log(response.data);
    });
  

XML

XML (Extensible Markup Language) adalah format data lain yang digunakan untuk API. Untuk mengurai respons XML di React Native, Anda dapat menggunakan pustaka seperti react-native-xml2js.

Pertama, instal pustaka:

npm install react-native-xml2js

Kemudian, Anda dapat menggunakan kode berikut untuk mengurai respons XML:

import { parseString } from 'react-native-xml2js';

  fetch('https://api.example.com/data.xml')
    .then(response => response.text())
    .then(xml => {
      parseString(xml, (err, result) => {
        if (err) {
          console.error('Error parsing XML:', err);
        } else {
          console.log(result);
        }
      });
    })
    .catch(error => {
      console.error('Error fetching XML:', error);
    });
  

Plain Text

Untuk menangani respons plain text, Anda dapat menggunakan metode response.text() di Fetch API:

fetch('https://api.example.com/data.txt')
    .then(response => response.text())
    .then(text => {
      console.log(text);
    })
    .catch(error => {
      console.error('Error fetching text:', error);
    });
  

Dengan Axios, Anda dapat mengakses respons plain text menggunakan response.data:

axios.get('https://api.example.com/data.txt')
    .then(response => {
      console.log(response.data);
    })
    .catch(error => {
      console.error('Error fetching text:', error);
    });
  

5. Handling API Authentication

Banyak API memerlukan otentikasi untuk mengakses sumber daya mereka. Otentikasi memastikan bahwa hanya pengguna yang berwenang yang dapat mengakses data dan fungsi sensitif.

Authentication methods (API keys, OAuth 2.0, JWT)

Ada beberapa metode otentikasi yang umum digunakan dalam API:

  • API Keys: Kunci API adalah kode unik yang digunakan untuk mengidentifikasi aplikasi atau pengguna. Mereka biasanya diteruskan sebagai parameter query atau header dalam permintaan API.
  • OAuth 2.0: OAuth 2.0 adalah kerangka kerja otorisasi yang memungkinkan pengguna untuk memberikan akses terbatas ke data mereka ke aplikasi pihak ketiga tanpa berbagi kredensial mereka.
  • JWT (JSON Web Tokens): JWT adalah token berbasis standar yang digunakan untuk mewakili klaim antara dua pihak. Mereka biasanya digunakan untuk mengotentikasi dan mengotorisasi pengguna dalam aplikasi web dan seluler.

Storing and managing tokens securely

Saat menggunakan otentikasi berbasis token (misalnya, OAuth 2.0, JWT), penting untuk menyimpan dan mengelola token dengan aman untuk mencegah akses tidak sah.

Berikut adalah beberapa praktik terbaik untuk menyimpan dan mengelola token:

  • Use Secure Storage: Gunakan penyimpanan aman yang disediakan oleh platform (misalnya, Keychain di iOS, Keystore di Android) untuk menyimpan token secara aman.
  • Avoid Storing Tokens in Plain Text: Jangan pernah menyimpan token dalam plain text di penyimpanan lokal atau dalam variabel kode.
  • Use Encryption: Enkripsi token sebelum menyimpannya untuk perlindungan tambahan.
  • Implement Token Refresh: Implementasikan mekanisme penyegaran token untuk mendapatkan token akses baru secara berkala, mengurangi risiko token yang dicuri atau disusupi.
  • Set Expiration Times: Tetapkan waktu kedaluwarsa yang wajar untuk token akses untuk meminimalkan dampak jika token dicuri.
  • Secure Transmission: Selalu gunakan HTTPS untuk mengirim dan menerima token untuk mencegah intersepsi oleh penyerang.

Di React Native, Anda dapat menggunakan pustaka seperti react-native-keychain untuk menyimpan dan mengambil kredensial secara aman:

npm install react-native-keychain
  

Contoh penggunaan react-native-keychain:

import * as Keychain from 'react-native-keychain';

  // Store credentials
  async function saveCredentials(username, password) {
    try {
      await Keychain.setGenericPassword(username, password);
      console.log('Credentials saved successfully!');
    } catch (error) {
      console.error('Keychain saving error:', error);
    }
  }

  // Retrieve credentials
  async function getCredentials() {
    try {
      const credentials = await Keychain.getGenericPassword();
      if (credentials) {
        console.log('Credentials retrieved successfully!');
        console.log('Username: ' + credentials.username);
        console.log('Password: ' + credentials.password);
      } else {
        console.log('No credentials stored');
      }
    } catch (error) {
      console.error('Keychain retrieval error:', error);
    }
  }

  // Reset credentials
  async function resetCredentials() {
    try {
      await Keychain.resetGenericPassword();
      console.log('Credentials reset successfully!');
    } catch (error) {
      console.error('Keychain reset error:', error);
    }
  }
  

Implementing token refresh strategies

Token akses biasanya memiliki umur yang terbatas. Setelah kedaluwarsa, mereka tidak lagi valid, dan Anda perlu mendapatkan token akses baru. Untuk menangani ini, Anda dapat mengimplementasikan strategi penyegaran token.

Berikut adalah dua strategi penyegaran token umum:

  • Automatic Token Refresh: Sebelum membuat permintaan API, periksa apakah token akses saat ini sudah kedaluwarsa. Jika sudah kedaluwarsa, dapatkan token akses baru menggunakan token penyegaran sebelum membuat permintaan API.
  • Refresh on Error: Jika permintaan API gagal karena token akses yang kedaluwarsa (misalnya, kode status 401), dapatkan token akses baru menggunakan token penyegaran dan coba lagi permintaan API.

Berikut adalah contoh cara mengimplementasikan penyegaran token otomatis menggunakan Axios interceptor:

import axios from 'axios';
  import * as Keychain from 'react-native-keychain';

  const instance = axios.create({
    baseURL: 'https://api.example.com'
  });

  instance.interceptors.request.use(
    async config => {
      const accessToken = await Keychain.getGenericPassword().then(creds => creds.password);
      if (accessToken) {
        config.headers.Authorization = `Bearer ${accessToken}`;
      }
      return config;
    },
    error => {
      return Promise.reject(error);
    }
  );

  instance.interceptors.response.use(
    response => {
      return response;
    },
    async error => {
      const originalRequest = error.config;
      if (error.response.status === 401 && !originalRequest._retry) {
        originalRequest._retry = true;
        try {
          // Retrieve the refresh token from secure storage
          const refreshToken = await Keychain.getGenericPassword().then(creds => creds.username);

          // Make a request to your backend to refresh the access token
          const refreshResponse = await axios.post('/refresh', {
            refreshToken: refreshToken
          });

          const newAccessToken = refreshResponse.data.accessToken;
          const newRefreshToken = refreshResponse.data.refreshToken;

          // Save the new access token and refresh token to secure storage
          await Keychain.setGenericPassword(newRefreshToken, newAccessToken);

          // Update the Authorization header on the original request
          originalRequest.headers.Authorization = `Bearer ${newAccessToken}`;

          // Retry the original request
          return instance(originalRequest);
        } catch (refreshError) {
          // Handle refresh token error (e.g., redirect to login)
          console.error('Error refreshing token:', refreshError);
        }
      }
      return Promise.reject(error);
    }
  );

  export default instance;
  

6. Data Transformation and Management

Setelah Anda mengambil data dari API, Anda sering perlu mengubahnya untuk memenuhi kebutuhan spesifik aplikasi Anda. Ini dapat melibatkan penguraian respons API, mengubah data untuk tampilan UI, dan mengelola data secara efisien menggunakan pustaka manajemen status.

Parsing API responses

Respons API biasanya dalam format JSON. Baik Fetch API maupun Axios secara otomatis menangani respons JSON, sehingga Anda dapat langsung mengakses data menggunakan response.json() (Fetch API) atau response.data (Axios).

Namun, terkadang, Anda mungkin perlu mengurai respons API secara manual jika dalam format yang berbeda atau jika Anda memerlukan pemrosesan khusus.

Transforming data for UI display

Data yang dikembalikan oleh API mungkin tidak selalu dalam format yang tepat untuk ditampilkan di UI Anda. Anda mungkin perlu mengubah data agar lebih ramah pengguna atau sesuai dengan struktur komponen UI Anda.

Berikut adalah beberapa contoh transformasi data umum:

  • Date Formatting: Format tanggal dan waktu agar lebih mudah dibaca.
  • Currency Formatting: Format angka sebagai mata uang.
  • String Manipulation: Ubah casing string, potong teks, atau gabungkan string.
  • Data Filtering: Filter data berdasarkan kriteria tertentu.
  • Data Sorting: Urutkan data berdasarkan properti tertentu.
  • Data Aggregation: Agregasi data untuk menghitung jumlah, rata-rata, atau statistik lain.

Anda dapat menggunakan JavaScript biasa atau pustaka seperti moment.js (untuk pemformatan tanggal) atau numeral.js (untuk pemformatan angka) untuk melakukan transformasi data.

Using state management libraries (Redux, Context API, MobX) for data persistence

Untuk mengelola data secara efisien dalam aplikasi React Native Anda, Anda dapat menggunakan pustaka manajemen status seperti Redux, Context API, atau MobX. Pustaka ini menyediakan cara terpusat untuk menyimpan dan mengelola data aplikasi Anda, membuatnya lebih mudah untuk berbagi data di antara komponen dan memelihara konsistensi data.

  • Redux: Redux adalah pustaka manajemen status yang populer yang menggunakan alur data searah dan penyimpanan terpusat untuk mengelola status aplikasi. Ini cocok untuk aplikasi besar dan kompleks dengan data yang banyak dan interaksi yang rumit.
  • Context API: Context API adalah fitur bawaan di React yang memungkinkan Anda untuk berbagi data di seluruh komponen tree tanpa harus secara manual meneruskan prop di setiap level. Ini cocok untuk aplikasi kecil dan sederhana dengan kebutuhan manajemen status yang terbatas.
  • MobX: MobX adalah pustaka manajemen status lain yang menggunakan reaktivitas untuk secara otomatis memperbarui UI saat status aplikasi berubah. Ini lebih mudah digunakan daripada Redux dan cocok untuk aplikasi dengan interaksi pengguna yang kompleks dan data yang berubah dengan cepat.

7. Error Handling and Debugging

Penanganan kesalahan dan debugging sangat penting untuk membangun aplikasi React Native yang andal dan robust. Bagian ini akan membahas cara menangani kesalahan jaringan, kesalahan API, dan mengimplementasikan mekanisme coba lagi, serta menggunakan alat debugging untuk mengidentifikasi dan memperbaiki masalah.

Handling network errors

Kesalahan jaringan dapat terjadi karena berbagai alasan, seperti koneksi internet yang tidak ada, masalah server, atau batas waktu. Penting untuk menangani kesalahan jaringan dengan baik untuk memberikan pengalaman pengguna yang baik.

Dengan Fetch API, Anda perlu memeriksa properti ok dari objek respons untuk menentukan apakah permintaan itu berhasil. Jika properti ok adalah false, itu berarti ada kesalahan jaringan.

fetch('https://api.example.com/users')
.then(response => {
if (!response.ok) {
throw new Error('Network response was not ok');
}
return response.json();
})
.then(data => {
console.log(data);
})
.catch(error => {
console.error('There was a problem with the fetch operation:', error);

omcoding

Leave a Reply

Your email address will not be published. Required fields are marked *