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