REST私が取り組んでいるAPIの場合、一貫したレイアウトでJSONを返したい:
{
"Data" : {
"Id" : 123,
"Email" : "[email protected]"
"Firstname" : "Charlie",
"Surname" : "Brown",
},
"Error" : null
}
ペイロードには常に「データ」と「エラー」が含まれ、どちらかがnullになる可能性があります。
私の質問は、「データ」と、実際には1つのオブジェクトしか返さないエンドポイントに関するものです。たとえば、APIがあるとしますusers/current
、現在認証されているユーザーを返します。上記のようにそのユーザーを返したでしょう。 「Data」という名前の単一のJSONオブジェクト。
ゼロ、1つ以上のオブジェクトを返す可能性のあるエンドポイントの場合、(もちろん)「データ」を配列にします。
{
"Data" : [
{
(first object)
},
{
(second object)
}
],
"Error" : null
}
一貫性を保つために、「データ」はalwaysは配列である必要があるという見解を聞いたことがあります。エンドポイントが論理的に1つのオブジェクト(またはnull)のみを返す場合でも。
他の人はどう思いますか?複数のオブジェクトが返されない場合は、「データ」と配列を作成する必要はないと思います。
この種の一貫性は見当違いだと思います。
配列にデータをラップしても、APIの利用者にメリットがあるとは思えません。APIの消費者は、実際のデータを解釈する方法をまだ知っている必要があるためです。例として、/users/current
と/cities/chicago/restaurants
の「データ」結果が同じコードで処理される可能性はほとんどありません。
一方、エラーの場合はisすべてのエラーが同じエラー処理コードによって処理される可能性が高く、同じ構造を使用する利点があります。
これを自問してみてください:これがお気に入りのクラスのクラスである場合OOP言語の場合、一貫性のためにすべてのメソッドが同じ型を返すようにしますか?
受信側でJSONメッセージの一般的な受信者が必要な場合、データノードを同じ形式にすると便利です。したがって、この場合は常に配列があると便利です。そのため、毎回同じ方法で解析できます。
各応答が個別に処理される場合(異なるメソッドからの異なるAPI呼び出し)、私はあなたの要点を見ることができますただし配列または1つのオブジェクトが返されます。
真の一貫性を提供していないため、私は配列のアプローチのファンではありませんこれらのシングルトンアレイでは、できるだけ早くアレイを作成します。それでも、2つの異なることを行う必要があります。
ただし、配列を使用する場合は、Dataがnullにならないようにしてください。データがない場合、配列は空でなければなりません。それは私が見ることができる唯一の利点です。