[読書会]認証付きリクエストの作成

 ほとんどの Web サービスからデータを取得する際、認証が必要です。
(この例では、HTTP リクエストに認証情報を付与してデータを取得する方法を説明します。
特に、Authorization ヘッダーを使用した認証について解説します。)

目次 index【閲覧時間3分】 click !!>>

1.認証ヘッダーの追加

 http パッケージを使用すると、HTTP リクエストに簡単にヘッダーを追加できます。
これにより、認証情報や追加のメタデータをサーバーに送信できます。

1.認証ヘッダーの追加(例):
final response = await http.get(
  Uri.parse('https://jsonplaceholder.typicode.com/albums/1'),
  //headers 引数:
  //( 認証ヘッダーを追加 )
  //( ここでは、HttpHeaders.authorizationHeader 
  //  をキーにして認証情報を付加しています。)
  headers: {
    HttpHeaders.authorizationHeader: 'Basic your_api_token_here',
  },
);

2.サンプルコード

 この例は、Fetching data from the internet(インターネットからデータを取得)のレシピを基にしていますが、認証ヘッダーが追加されています。

Dart
import 'dart:async';
import 'dart:convert';
import 'dart:io';

import 'package:http/http.dart' as http;

//認証付きでアルバムデータを取得する関数
Future<Album> fetchAlbum() async {
  final response = await http.get(
    Uri.parse('https://jsonplaceholder.typicode.com/albums/1'),
    //認証ヘッダーをバックエンドに送信
    headers: {
      HttpHeaders.authorizationHeader: 'Basic your_api_token_here',
    },
  );

  //レスポンスボディを JSON に変換
  final responseJson = jsonDecode(response.body) as Map<String, dynamic>;

  //JSON データを Album オブジェクトに変換して返す
  return Album.fromJson(responseJson);
}

//Album クラス
class Album {
  final int userId; //ユーザー ID
  final int id;     //アルバム ID
  final String title; //アルバムタイトル

  const Album({
    required this.userId,
    required this.id,
    required this.title,
  });

  //JSON データから Album オブジェクトを生成するファクトリコンストラクタ
  factory Album.fromJson(Map<String, dynamic> json) {
    return switch (json) {
      {
        'userId': int userId,
        'id': int id,
        'title': String title,
      } =>
        Album(
          userId: userId,
          id: id,
          title: title,
        ),
      //JSON データが期待する形式でない場合は例外をスロー
      _ => throw const FormatException('Failed to load album.'),
    };
  }
}

コメントを残す