見出し画像

[Dart]HTTPレスポンスを返す方法

今日はDartを使ってHTTPリクエストを処理し、HTTPレスポンスを返す方法について解説していきたいと思います。

Dartを使ったHTTPリクエスト、レスポンスに関する記事は他にも書いてますので、ご参照ください。

サンプルコード


import 'dart:convert';
import 'dart:io';

Future<void> handleRequest(
  HttpRequest request,
) async {
  try {
    final requestBody = await utf8.decoder.bind(request).join();
    final data = json.decode(requestBody) as Map<String, dynamic>;

    if (data.containsKey('task') == false) {
      request.response
        ..statusCode = HttpStatus.badRequest
        ..write("error")
        ..close();
      return;
    }
    request.response
      ..statusCode = HttpStatus.ok
      ..write("ok")
      ..close();
  } catch (e) {
    print(e);
    request.response
      ..statusCode = HttpStatus.badRequest
      ..write("error")
      ..close();
  }
}

コードの各行で実施していることを説明していきます。
1-2行目:

import 'dart:convert';
import 'dart:io';

dart:convertdart:ioライブラリをインポートしています。これらは、それぞれ文字コードの変換やJSONの操作、ファイル操作やHTTPリクエストの処理に関する機能を提供しています。

4-7行目:

Future<void> handleRequest(
  HttpRequest request,
) async {

handleRequestという非同期関数を定義しています。
この関数は、HTTPリクエストを受け取り、そのリクエストを処理してHTTPレスポンスを返します。

9-10行目:

final requestBody = await utf8.decoder.bind(request).join();
final data = json.decode(requestBody) as Map<String, dynamic>;

リクエストボディを取得し、UTF-8でデコードしてJSONデータをMap<String, dynamic>型に変換しています。

12-16行目:

if (data.containsKey('task') == false) {
  request.response
    ..statusCode = HttpStatus.badRequest
    ..write("error")
    ..close();
  return;
}

受け取ったJSONデータに'task'というキーが存在しない場合、HTTPステータスコード400(Bad Request)とエラーメッセージを返し、処理を終了しています。

18-22行目:

request.response
  ..statusCode = HttpStatus.ok
  ..write("ok")
  ..close();

リクエストが正常に処理された場合、HTTPステータスコード200(OK)とレスポンスヘッダにJSON形式を指定し、成功メッセージを返しています。

24-29行目:

} catch (e) {
  print(e);
  request.response
    ..statusCode = HttpStatus.badRequest
    ..write("error")
    ..close();
}

この部分では、例外処理を行っています。
もしリクエストの処理中に何らかのエラーが発生した場合、エラー内容をコンソールに出力し、HTTPステータスコード400(Bad Request)とエラーメッセージを返しています。

まとめ

今回の記事ではDartを使ってHTTPリクエストを処理し、HTTPレスポンスを返す方法について解説しました。
皆さんのプロジェクトでもDartでのHTTPリクエストの処理を実装してみてください!

この記事が気に入ったらサポートをしてみませんか?