🗂

Flutterについて

2021/05/18に公開

はじめに

今回はコミュニティ参加者の方から Flutter について質問がありましたので、そちらを書いていきます。

質問内容

現在公式チュートリアルの型をそのまま使って HTTP リクエストの受け渡しを試みていますが、シミュレーターには「クラスの読み込みに失敗してる」とエラーが出ています。
クラス定義の箇所に問題がある気がしますが、原因はまだわかってません;;
取得すべきレスポンスフィールド名(?)が間違えてるのかと思ってます!

目次

  1. エラーの原因
  2. Parse(パース)とは
  3. エンコードとは
  4. Json とは
  5. レスポンスフィールド名とは
  6. まとめ

1.エラーの原因

今回のエラーの主な原因はリクエスト URL が間違った(404)ことと Json の構造が問題でした

エラー原因に関連する Json に対する理解の洗い出しをしました

2.Parse(パース)とは

そもそも Parse(パース)とはなんなのか?日本語で訳すと解析する
コンピュータプログラムの機能・処理の一つで、一定の書式や文法に従って記述されたデータを解析し、プログラムで扱えるようなデータ構造の集合体に変換することをパースという。(引用:IT 用語辞典)

3.エンコードとは

データを他の形式へ変換すること
エンコードの逆、エンコードしたデータを元の形に戻す行為はデコードという
参考: https://tech-unlimited.com/urlencode.html

URL エンコード

実際にブラウザの URL に貼り付けると、別のテキストに変わる = エンコードされた状態

以下二つの URL は同じ検索結果になる
https://www.google.com/search?q=日本語&oq=日本語

https://www.google.com/search?q=%E6%97%A5%E6%9C%AC%E8%AA%9E&oq=%E6%97%A5%E6%9C%AC%E8%AA%9E

URL のエンコードの場合、特定のキーワードが入っている

\u: ユニコード
%: URL エンコード

ASCII 文字と URL エンコードの対応表

ASCII は日本語使えない
「\u エンコード」で調べてみると.. エンコードにもルールがある

文字コード

例)日本語で扱うデータの大きさと英語で扱うデータの大きさは違う = データの扱いのミスマッチ

歴史として、英語で統一したらミスマッチないよね → 英語統一されている

Base64 エンコード

  • 規則性がある
  • 最も原始的だが、めちゃくちゃ使用するケースがある

画像送信

画像データをテキストデータに変換してから送受信している

テキストデータでやりとりできるように Base64 エンコードしてデコードでテキストデータから画像データに戻す

末尾に 「==」 がつくと大体 Base64

パースとデコードの違い

パースは解析、デコードはエンコードされたデータを元に戻すこと。

実装ベースだと、Json でもらったものをデコードして元のデータに戻す → パースで型指定したものに入れ込む

4.Json とは

JavaScript Object Notation の略
JavaScript のデータ定義文をベースとした、簡易的なデータ定義言語
JavaScript だけではなく、Java, PHP, Ruby, Python など、様々な言語間のデータ交換、特に Ajax や REST API などで使用されている
これまでは、共通データ定義言語として XML が利用されてきましたが、現在では、簡易的な JSON が利用されるケースが増えてきている

結論
異なるプログラミング言語間でデータをやりとりするための、共通のデータ記述形式

5.レスポンスフィールド名とは

API から返されるレスポンスには、すべての API に共通のフィールドと、API ごとに定義される個別のフィールドがあります。

以下に共通のフィールド

フィールド タイプ 意味
RequestId String API リクエストごとに割り当てられるユニークな ID
参考:https://manual.iij.jp/dns/doapi/index.html

6.まとめ

  • Parse とはコンピュータプログラムの機能・処理の一つで、一定の書式や文法に従って記述されたデータを解析し、プログラムで扱えるようなデータ構造の集合体に変換することをパースという。
  • エンコードとはデータを他の形式へ変換することエンコードの逆、エンコードしたデータを元の形に戻す行為はデコードという。
  • Json とは異なるプログラミング言語間でデータをやりとりするための、共通のデータ記述形式のこと。

Discussion