見出し画像

[Dart]HTTPレスポンスをJSON形式で返す

Dart言語を用いて、HTTPレスポンスをJSON形式で返す方法についてまとめました!

以下、簡単なサンプルコードで説明していきます。

サンプルコード

このコードでは、HTTPリクエストを処理し、成功時にはJSON形式の成功メッセージを返し、エラーが発生した場合にはJSON形式のエラーメッセージを返します。

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

Future<void> handleRequest(
  HttpRequest request,
) async {
  try {
    request.response
      ..statusCode = HttpStatus.ok
      ..headers.contentType = ContentType.json
      ..write(json.encode({"メッセージ": "成功"}))
      ..close();
  } catch (e) {
    request.response
      ..statusCode = HttpStatus.badRequest
      ..headers.contentType = ContentType.json
      ..write(json.encode({"メッセージ": "エラー"}))
      ..close();
  }
}

JSONとは?

JSON(JavaScript Object Notation)は、データ交換のために設計された軽量なテキスト形式のデータ表現です。
JSONは人間にも機械にも容易に読み書きできる形式で、主にWebアプリケーションやモバイルアプリでサーバーとクライアント間でデータをやり取りする際に使用されます。

インポート

まず、以下の2つのライブラリをインポートしています。

import 'dart:convert';
import 'dart:io';
  • dart:convert: JSONエンコードとデコードのためのユーティリティを提供します。

  • dart:io: HTTPサーバーやHTTPクライアント、ファイル入出力などのI/O関連の機能を提供します。

ちなみにI/Oとは、Input/Outputの略で「入出力」を意味します。

handleRequest

引数でHTTPリクエスト受け取って処理し、リクエストに対する適切なレスポンスを生成します。

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

成功時のレスポンス

関数内のtryブロックでは、以下の処理を行っています。

request.response.headers.contentType = ContentType.json:
レスポンスオブジェクトのheaders.contentTypeプロパティに、ContentType.jsonを設定します。これにより、レスポンスヘッダーにContent-Type: application/jsonが追加され、クライアントに対してレスポンスボディがJSON形式であることを示します。

request.response.write(json.encode({"メッセージ": "成功"})):
json.encodeメソッドを使用して、DartのMapオブジェクト({"メッセージ": "成功"})をJSON文字列に変換し、レスポンスオブジェクトに書き込みます。

request.response.close():
レスポンスオブジェクトのclose()メソッドを呼び出し、レスポンスを送信します。
これにより、クライアントに対してレスポンスが完了し、コネクションが閉じられます。コネクションを閉じることで、システムリソースを節約できます。

request.response
  ..statusCode = HttpStatus.ok
  ..headers.contentType = ContentType.json
  ..write(json.encode({"メッセージ": "成功"}))
  ..close();

まとめ

この記事では、Dart言語を使用してJSON形式でレスポンスを返す方法について解説しました。

このようなシンプルなHTTPリクエストハンドラは、API開発の初期段階で簡単なテストを行いたい場合や、独自の小規模なHTTPサーバーを構築する際に役立ちます。
ただし、実際のアプリケーション開発では、より堅牢で機能豊富なフレームワーク(例えば、shelfangel)を使用することが一般的です。
これらのフレームワークは、ルーティング、ミドルウェア、セキュリティ対策などの追加機能を提供し、より効率的な開発が可能になります。

いいなと思ったら応援しよう!