RESTful API Integration এবং Authentication

Mobile App Development - ফ্লাটার (Flutter) - HTTP এবং API Integration
250

Flutter-এ RESTful API Integration এবং Authentication অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি অ্যাপ্লিকেশনকে সার্ভারের সাথে যোগাযোগ করতে এবং ব্যবহারকারীদের সুরক্ষিত অ্যাক্সেস প্রদান করতে সহায়ক করে। RESTful API Integration এর মাধ্যমে অ্যাপ্লিকেশন ডেটা ফেচ করতে পারে, ডেটা আপডেট করতে পারে, এবং ডাটাবেসের সাথে যোগাযোগ করতে পারে। Authentication ব্যবহার করে, ব্যবহারকারীর তথ্য সুরক্ষিত রাখা যায় এবং শুধুমাত্র অনুমোদিত ব্যবহারকারীদের জন্য অ্যাপ্লিকেশনের নির্দিষ্ট অংশ অ্যাক্সেস করা যায়।

১. RESTful API Integration

Flutter-এ RESTful API Integration করতে সাধারণত http বা Dio প্যাকেজ ব্যবহার করা হয়। এই প্যাকেজগুলোর মাধ্যমে আমরা GET, POST, PUT, DELETE ইত্যাদি HTTP রিকোয়েস্ট পাঠাতে পারি এবং ডেটা সংগ্রহ করতে পারি।

উদাহরণ: RESTful API Integration (GET এবং POST রিকোয়েস্ট)

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  String? _data;

  Future<void> fetchData() async {
    final response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/posts/1'));

    if (response.statusCode == 200) {
      final jsonData = json.decode(response.body);
      setState(() {
        _data = jsonData['title'];
      });
    } else {
      throw Exception('Failed to load data');
    }
  }

  Future<void> postData() async {
    final response = await http.post(
      Uri.parse('https://jsonplaceholder.typicode.com/posts'),
      headers: <String, String>{
        'Content-Type': 'application/json; charset=UTF-8',
      },
      body: jsonEncode(<String, String>{
        'title': 'Flutter POST Request',
        'body': 'This is a test post request.',
        'userId': '1',
      }),
    );

    if (response.statusCode == 201) {
      final jsonData = json.decode(response.body);
      print('Response: $jsonData');
    } else {
      throw Exception('Failed to post data');
    }
  }

  @override
  void initState() {
    super.initState();
    fetchData();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('RESTful API Integration'),
      ),
      body: Center(
        child: _data == null
            ? CircularProgressIndicator()
            : Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  Text(_data!),
                  ElevatedButton(
                    onPressed: postData,
                    child: Text('Send POST Request'),
                  ),
                ],
              ),
      ),
    );
  }
}

২. Authentication (Token-based)

Flutter-এ Token-based Authentication (যেমন JWT বা Bearer Token) সাধারণত ব্যবহৃত হয়। এই প্রক্রিয়ায়, ব্যবহারকারী লগইন করলে সার্ভার থেকে একটি Token ফেরত আসে, যা পরবর্তী সকল API রিকোয়েস্টে ব্যবহার করে Authentication নিশ্চিত করা হয়।

ধাপ ১: Authentication API কল (লগইন)

Future<String?> login(String email, String password) async {
  final response = await http.post(
    Uri.parse('https://example.com/api/login'),
    headers: <String, String>{
      'Content-Type': 'application/json; charset=UTF-8',
    },
    body: jsonEncode(<String, String>{
      'email': email,
      'password': password,
    }),
  );

  if (response.statusCode == 200) {
    final jsonData = json.decode(response.body);
    String token = jsonData['token'];
    return token; // টোকেন ফেরত দেয়া হচ্ছে
  } else {
    throw Exception('Failed to login');
  }
}
  • http.post: এখানে লগইন রিকোয়েস্ট পাঠানো হয়েছে। সঠিক ইমেইল এবং পাসওয়ার্ড প্রদান করলে সার্ভার থেকে একটি token ফেরত আসে।
  • jsonEncode: ইউজার ইনপুটকে JSON ফরম্যাটে কনভার্ট করে পাঠানো হয়েছে।
  • headers: Content-Type কে application/json হিসেবে সেট করা হয়েছে, যাতে সার্ভার ডেটা সঠিকভাবে বুঝতে পারে।

ধাপ ২: সুরক্ষিত API কল (Token ব্যবহার করে)

লগইন করার পর টোকেন ব্যবহার করে সুরক্ষিত API কল করতে হয়। টোকেনটি API রিকোয়েস্টে Authorization হেডারে পাঠানো হয়।

Future<void> fetchProtectedData(String token) async {
  final response = await http.get(
    Uri.parse('https://example.com/api/protected'),
    headers: <String, String>{
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer $token', // টোকেন যুক্ত করা হয়েছে
    },
  );

  if (response.statusCode == 200) {
    final jsonData = json.decode(response.body);
    print('Protected Data: $jsonData');
  } else {
    throw Exception('Failed to fetch protected data');
  }
}
  • Authorization হেডারে Bearer টোকেন পাঠানো হয়েছে, যা সার্ভারকে নির্দেশ করে যে এই রিকোয়েস্টটি একটি সুরক্ষিত রিকোয়েস্ট এবং টোকেনটি যাচাই করতে হবে।

৩. টোকেন সংরক্ষণ এবং ব্যবহার

Flutter-এ টোকেন সংরক্ষণ করতে SharedPreferences বা Secure Storage ব্যবহার করা যায়। টোকেন সংরক্ষণ করলে ব্যবহারকারীকে বারবার লগইন করতে হয় না।

উদাহরণ: SharedPreferences ব্যবহার করে টোকেন সংরক্ষণ করা

import 'package:shared_preferences/shared_preferences.dart';

// টোকেন সংরক্ষণ করা
Future<void> saveToken(String token) async {
  final prefs = await SharedPreferences.getInstance();
  await prefs.setString('auth_token', token);
}

// টোকেন রিড করা
Future<String?> getToken() async {
  final prefs = await SharedPreferences.getInstance();
  return prefs.getString('auth_token');
}
  • saveToken: টোকেন SharedPreferences এ সেভ করে রাখা হয়েছে, যাতে এটি পরবর্তীতে সহজে অ্যাক্সেস করা যায়।
  • getToken: সংরক্ষিত টোকেন রিড করে অ্যাপ্লিকেশনে ব্যবহার করা হয়েছে।

৪. লগআউট ফাংশনালিটি

লগআউট করার সময় টোকেন রিমুভ করে এবং অ্যাপ্লিকেশনকে রিফ্রেশ করা হয়।

Future<void> logout() async {
  final prefs = await SharedPreferences.getInstance();
  await prefs.remove('auth_token'); // টোকেন রিমুভ করা
}

৫. সুরক্ষিত অ্যাপ্লিকেশন ব্যবহার নিশ্চিত করা

যখন অ্যাপ্লিকেশন চালু হয়, তখন নিশ্চিত করুন যে টোকেন পাওয়া যাচ্ছে কিনা। যদি টোকেন থাকে, তবে ব্যবহারকারীকে সরাসরি সুরক্ষিত স্ক্রিনে নিয়ে যান। অন্যথায়, লগইন স্ক্রিন দেখান।

void checkAuthentication(BuildContext context) async {
  String? token = await getToken();
  if (token != null) {
    // টোকেন পাওয়া গেছে, সুরক্ষিত স্ক্রিনে যান
    Navigator.pushReplacement(
      context,
      MaterialPageRoute(builder: (context) => ProtectedScreen()),
    );
  } else {
    // টোকেন পাওয়া যায়নি, লগইন স্ক্রিনে যান
    Navigator.pushReplacement(
      context,
      MaterialPageRoute(builder: (context) => LoginScreen()),
    );
  }
}

সারাংশ

  • RESTful API Integration: Flutter-এ http বা Dio প্যাকেজ ব্যবহার করে RESTful API এর মাধ্যমে ডেটা ফেচ করা এবং আপডেট করা যায়।
  • Authentication: Token-based authentication (যেমন JWT) ব্যবহার করে অ্যাপ্লিকেশনকে সুরক্ষিত করা যায়।
  • Token Storage: টোকেন সংরক্ষণ করতে SharedPreferences বা Secure Storage ব্যবহার করা হয়, যাতে ব্যবহারকারীর সেশন ম্যানেজ করা যায়।
  • Logout Functionality: লগআউট করলে টোকেন রিমুভ করে ব্যবহারকারীকে লগইন স্ক্রিনে পাঠানো হয়।

Flutter-এ RESTful API এবং Authentication ব্যবহারে এই পদ্ধতিগুলো ফলো করলে আপনি একটি সুরক্ষিত এবং কার্যকরী অ্যাপ্লিকেশন তৈরি করতে পারবেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...