質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

2回答

1584閲覧

[WebAPI設計]Web API実行時のリクエストに必須項目を含めない設計はベストか

ksescks

総合スコア4

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/04/15 05:03

編集2022/01/12 10:55

聞きたいこと

WebAPIの設計に関して質問です。
現在業務でフロントエンド開発をしているのですが、Webフロントエンドに、バックエンドには必須項目でない値が入力されていない場合に、Web APIのリクエストに該当の項目をパラメーターとして含めないでほしいとアナウンスが有りました。

具体的な例でいうと、ユーザ登録画面で

  • Email(email)
  • パスワード(password)
  • 性別(gender)

の3項目を入力する事ができるとします。
もし仮に3つすべて入力されていた場合は、下のようにリクエストを送信します。

{ email: 'hoge@example.com', password: 'password', gender: 'man' }

ただ、性別項目自体はバックエンドとして必須でないため、性別が未入力の場合は以下のようにリクエストを送信してくれと言われました。

{ email: 'hoge@example.com', password: 'password' }

個人的に、性別が未入力の場合、パラメーター自体を削除するのではなく、下のように空にして送信するのがオーソドックスかなと思っていますが、このようなWeb APIの設計は一般的なのでしょうか。

{ email: 'hoge@example.com', password: 'password', gender: '' }

もしアナウンスされた方法が一般的でない場合(Badな場合)、この方法が一般的でないことを説明している文献など紹介していただけたら嬉しいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

個人的に、性別が未入力の場合、パラメーター自体を削除するのではなく、下のように空にして送信するのがオーソドックスかなと思っていますが、このようなWeb APIの設計は一般的なのでしょうか。

はい、値が存在しないことを伝えるいちばん確実な方法は「キー自体を送信しない」ことです。性別の場合は違うかもしれませんが、空文字列を取りうる列では「空文字列を送る」方法は使えません。

投稿2020/04/15 05:04

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ksescks

2020/04/15 05:36 編集

回答いただきありがとうございます。使用しているWebフロントエンドのテクノロジーによるかもしれませんが、追加で質問させてください。 今後仮にユーザー登録画面に、「電話番号(tel)」「趣味(hobby)」等バックエンド側で必須でない項目を追加した場合、「性別」「電話番号」「趣味」の3つの中から空でないものだけを抽出して、リクエストに含める形になるかと思います。 必須項目でない項目が追加されるたびに、Webフロントエンド側で空文字チェックなどの条件分岐を追加する必要があるのが少し大変だなぁと思っているのですが、なにかベストプラクティスなどあるのでしょうか。
maisumakun

2020/04/15 05:35

> 必須項目でない項目が追加されるたびに、Webフロントエンド側で空文字チェックなどの条件分岐を追加する必要がある そんな必要がありますか?(空文字列を受け付ける項目があるなら別ですが)全列をループで回してチェックすれば、列が増えようが追加の必要はないです。
guest

0

genderを必須項目にしNullable、つまりnullが入ってもよい項目にする設計方法もあります。この方法ですとフロントエンドで受け取る際にキーのチェックが必要なくなります。代わりにTypeScriptであればstring | nullの型として扱われ、型レベルでのチェックが必要になります。こちらのほうが手間はかかりますが、コンパイル時に安全性を担保できるため、その点では有利でしょう。

投稿2020/04/15 05:12

A_kirisaki

総合スコア2853

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問