[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:convertとdart: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リクエストの処理を実装してみてください!
この記事が気に入ったらサポートをしてみませんか?