プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • API
  • 【API】返すJSONデータの中身について
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【API】返すJSONデータの中身について

04.18

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

エンベロープは必要か?

エンベロープ(日本語でいえば封筒)とは以下のような形式のデータ以外の付加情報のことです。一見すると統一的なフォーマットに見えますが、結論から申しますと冗長なので必要ないです。

1
2
3
4
5
6
7
8
9
[
  "header": {
    "status": "success",
    "errorCode": 0,
  },
  "response": {
     ...
  },
]

なぜエンベローブは不要か?

Web APIは基本的にHTTPを利用していてHTTPがエンベローブの役割を果たしているためです。HTTPにはヘッダがあってそのヘッダがエンベローブの役割を果たしています。より詳細な情報はHTTPヘッダに入れるようにすれば良いです。

レスポンスステータスや、レスポンスヘッダなどはHTTPレスポンスヘッダに全て入れ込んで仕舞えば良いでしょう。

ただ、一部例外があってJSONPをクライアントライブラリとして利用している場合はブラウザでデータを読み込む場合はステータスコードやレスポンスヘッダにアクセスすることができないのでその場合はエンベローブはあった方が良いでしょう。

データはフラットにすべきか?

階層化するとJSONのデータ容量が増えるのでできるだけフラットにするのが望ましいでしょう。必要があった場合は階層化するという方式が良いです。

配列とオブジェクトの使い分け

JSONはトップレベルに配列もオブジェクトもどちらでも配置することが可能ですが、どちらかといえば以下の理由でオブジェクトをトップレベルにした方が良いです。

  • レスポンスデータが何を示しているのかわかりやすくなる。
  • セキュリティ上のリスクが低くなる。(JSONインジェクション攻撃に強くなる。)

配列

  • 順序が保証される。
  • データはわかりづらい。

オブジェクト

  • データ構造がわかりやすくなる。
  • 順序が保証されない。

日付の表現方法

いろいろな日付形式がありますが、RFC 3339を使うのが良いでしょう。インターネット上で用いる標準形式として定められたフォーマットです。

形式名 例 特徴
RFC 822(RFC1123で廃止) Sun,12 Dec 2004 08:12:10 GMT
RFC 850(RFC1036で廃止) Sunday,12 Dec 2004 08:12:10 GMT
ANSI Cのasctime形式 Sun Dec 12:11:34:21 2004
RFC 3339 2004-11-1211:34:22+09:00
Unixタイムスタンプ(epoch秒) 128473838 1970年1月1日からの経過時間を秒で表す。

 

スポンサーリンク
  • 2021 04.18
  • miyabisan2
  • コメントを書く
  • API
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2021 04.18

    【API】設計手順

  2. 2021 04.18

    【API】Web APIの種類や歴史、WebHookについて

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【セキュリティ】「OAuth」、「Open ID Co…

【React】状態管理の選択肢(「Hooks」、「Re…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー