タグ付けされた質問 「api-design」


7
RESTネストリソースのベストプラクティスは何ですか?
私の知る限り、個々のリソースには正規パスが1つだけ必要です。次の例では、適切なURLパターンは何でしょうか? 例として、会社の残りの表現を取り上げます。この架空の例では、各会社が 0以上の部門を所有し、各部門が 0以上の従業員を所有しています。 関連する会社がなければ、部門は存在できません。 従業員は、関連する部門なしでは存在できません。 これで、リソースパターンの自然な表現がわかります。 /companies 会社のコレクション -新しい会社のプットを受け入れます。コレクション全体を手に入れよう。 /companies/{companyId}個々の会社。GET、PUT、DELETEを受け入れる /companies/{companyId}/departments新しいアイテムのPOSTを受け入れます。(社内に部門を作成します。) /companies/{companyId}/departments/{departmentId}/ /companies/{companyId}/departments/{departmentId}/employees /companies/{companyId}/departments/{departmentId}/employees/{empId} 制約を考えると、各セクションでは、少し深く入れ子にするとこれは理にかなっていると感じます。 ただし、GETすべての会社のすべての従業員をリスト()にしたい場合、問題が生じます。 そのためのリソースパターンは、/employees(全従業員のコレクション)に最も密接にマッピングされます。 それは、/employees/{empId}もしそうなら、同じリソースを取得するための2つのURIがあるので、私も持っている必要があるということですか? または、スキーマ全体をフラット化する必要があるかもしれませんが、それは従業員がネストされたトップレベルのオブジェクトであることを意味します。 基本レベルで/employees/?company={companyId}&department={deptId}は、最も深くネストされたパターンとまったく同じ従業員のビューが返されます。 リソースは他のリソースによって所有されているが、個別にクエリ可能でなければならないURLパターンのベストプラクティスは何ですか?
301 rest  api-design 

11
APIページネーションのベストプラクティス
私が作成しているページ分割されたAPIを使用して、奇妙なエッジケースを処理するのに役立ついくつかのものが欲しいです。 多くのAPIと同様に、これは大きな結果をページ分割します。/ foosに対してクエリを実行すると、100の結果(つまり、foo#1-100)と、foo#101-200を返す/ foos?page = 2へのリンクが表示されます。 残念ながら、APIコンシューマが次のクエリを実行する前にfoo#10がデータセットから削除された場合、/ foos?page = 2は100だけオフセットされ、foos#102-201を返します。 これは、すべてのfooをプルしようとしているAPIコンシューマーの問題です-foo#101を受信しません。 これを処理するためのベストプラクティスは何ですか?できる限り軽量化したい(つまり、APIリクエストのセッションの処理を避けたい)。他のAPIの例をいただければ幸いです。

5
Java Streamsが一度オフになるのはなぜですか?
C#とは異なりIEnumerable、実行パイプラインは何度でも実行できますが、Javaではストリームを1回だけ「反復」できます。 端末操作を呼び出すと、ストリームが閉じて使用できなくなります。この「機能」は多くの力を奪います。 これの理由は技術的ではないと思います。この奇妙な制限の背後にある設計上の考慮事項は何でしたか? 編集:私が話していることを示すために、C#でのQuick-Sortの次の実装を検討してください。 IEnumerable<int> QuickSort(IEnumerable<int> ints) { if (!ints.Any()) { return Enumerable.Empty<int>(); } int pivot = ints.First(); IEnumerable<int> lt = ints.Where(i => i < pivot); IEnumerable<int> gt = ints.Where(i => i > pivot); return QuickSort(lt).Concat(new int[] { pivot }).Concat(QuickSort(gt)); } 確かに、これがクイックソートの適切な実装であることを私は主張していません。ただし、これは、ラムダ式とストリーム操作を組み合わせた表現力の優れた例です。 そして、それはJavaではできません!ストリームを使用不可にすることなく、ストリームが空かどうかを確認することもできません。

8
RESTfulな方法でリソースのサーバー側メソッドを呼び出す
RESTについて初歩的な理解があることを覚えておいてください。私がこのURLを持っているとしましょう: http://api.animals.com/v1/dogs/1/ そして今、私はサーバーに犬の鳴き声をさせたいと思います。サーバーだけがこれを行う方法を知っています。残りの永遠のために犬を10分ごとに吠えるCRONジョブで実行したいとします。その呼び出しはどのように見えますか?私はこれをやりたいと思っています: URLリクエスト: ACTION http://api.animals.com/v1/dogs/1/ リクエストの本文: {"action":"bark"} 独自のHTTPメソッドを作成することに夢中になる前に、私を助けて、RESTfulな方法でサーバー側メソッドを呼び出す方法についてより良いアイデアを教えてください。:) 明確化のために編集 「樹皮」メソッドの機能について、さらに説明します。異なる構造のAPI呼び出しが発生する可能性のあるいくつかのオプションを次に示します。 barkはdog.emailにメールを送信し、何も記録しません。 barkはdog.emailにメールを送信し、dog.barkCountを1ずつ増分します。 barkは、吠え声が発生したときにbark.timestamp記録で新しい「吠え声」レコードを作成します。また、dog.barkCountを1増やします。 barkはシステムコマンドを実行して、最新バージョンの犬のコードをGithubから取得します。次に、dog.ownerにテキストメッセージを送信して、新しい犬のコードが生産中であることを伝えます。

7
RESTful APIでパスパラメータとクエリパラメータを使用するのはいつですか?
RESTful APIを非常に予測可能にしたいと考えています。クエリパラメータを使用するのではなく、URIを使用してデータのセグメンテーションを行うタイミングを決定するためのベストプラクティスは何ですか。 ページネーション、並べ替え、およびグループ化をサポートするシステムパラメータは、「?」の後に来るのが理にかなっています。しかし、 'status'や 'region'などのフィールド、またはコレクションをセグメント化するその他の属性についてはどうでしょうか。それらもクエリパラメータになる場合、パスパラメータをいつ使用するかを知る上での経験則は何ですか?

4
String.valueOf(null)がNullPointerExceptionをスローするのはなぜですか?
ドキュメントによると、メソッドString.valueOf(Object obj)は次を返します: 引数がの場合null、次に等しい文字列"null"。それ以外の場合は、の値obj.toString()が返されます。 しかし、私がこれをやろうとするとどうなりますか: System.out.println("String.valueOf(null) = " + String.valueOf(null)); 代わりにNPEをスローしますか?(信じられない場合は自分で試してください!) スレッド「メイン」の例外java.lang.NullPointerException java.lang.String。(不明なソース) java.lang.String.valueOf(Unknown Source)で なぜこれが起こっているのですか?ドキュメントは私に嘘をついていますか?これはJavaの大きなバグですか?


28
GB英語、または米国英語?
APIを使用していて、非常に国際的なオーディエンスを持つ英国ベースの開発者である場合、APIは setColour() または setColor() (1つの単語を簡単な例として取り上げます。) 英国に拠点を置くエンジニアは、多くの場合、「正しい」スペルについてかなり防御的ですが、米国のスペルは国際市場ではより「標準的」であると主張できます。 問題はそれが問題なのでしょうか?他のロケールの開発者はGBスペルに苦労していますか、それとも通常、意味がかなり明白ですか? すべてを米国英語にする必要がありますか?

3
トークンの有効期限が切れました-JSONRESTAPI-エラーコード
JSON RESTAPIがあります。15分間有効なトークンを与えるハンドシェイクがあります。15分以内に行うすべての通話は問題なく機能するはずです。15分後、エラーオブジェクト(コード、メッセージ、成功= falseを含む)を返していますが、どのHTTPエラーコードを返す必要があるのか​​疑問に思っていました。また、HTTPエラーコードを使用すると、特定のクライアントが混乱しますか?(HTML5、iPhone、Android)。このシナリオでベストプラクティスと見なされるものは何ですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.