タグ付けされた質問 「rest」

表現状態転送(REST)は、ネットワーキングソフトウェアがWeb経由で情報を転送するためのアーキテクチャスタイルです。

2
Java Spring for Beginnerを使用したRESTfulサービスの構造
私はJava Web開発スキルの点で比較的新しいです。APIについて私が少ししか理解していないことから、RESTfulサービスの良い候補になると思うプロジェクトがあります。私はこれがどのように構成されているのかを詳しく説明しようとしていますが、Google検索やすでに持っている資料を読むという点では実際にはどこにも行きません。この投稿が、このトピックに関する私の知識と仮定の観点から、いくつかの検証やリダイレクトをもたらすことを望んでいます。 私の現在の仮定は、RESTfulサービスが次の構造を持つことです。 データベースデータ(SQL)。 ORM(私はCPOと呼ばれる比較的人気のないORMを使用していますが、ほとんどの人はこれをHibernateに置き換えるだけです)。 ORMと通信してデータを取得するメソッドを持つJavaマネージャークラス クラス/クラスはハンドルがマッピングおよび使用を要求することをAのJavaコントローラ@ResponseBodyに指示する/ HTTP動詞を介してデータの処理方法のURLとアクションを処理(http://mysite.com/computers/dellがあるかもしれないGET単語「デル」とのリクエストURLは、Dellコンピューターに関する情報のJSON配列を返すパラメーターです)。 このサービスは、Spring Bootで作成するか、何らかの形で独立して他のアプリケーションから独立させる必要があります。 上記が正しいと仮定すると、(非常に基本的なレベルで)データを消費および使用するために任意のアプリケーションが使用できるRESTfulサービスがあります。 そこで、Webアプリケーションを作成するとします。コンピューターハードウェア情報に関するWebアプリを作成しており、Springを使用してこのWebアプリを作成しているとします。私の仮定は次のとおりです。 私は、JSPとしてHTML、CSS、およびJavaScriptインクルードを持つJSPとして多数のビューを持っています。JavaScriptは、必要に応じてこのアプリケーションのコントローラーへのAJAX呼び出しを処理します(以下)。 このWebアプリには、アプリのURLリクエストとルーティングを処理する独自のコントローラーもあり、コントローラーは、たとえば、ModelAndViewオブジェクトまたはそれらの行に沿ったものを使用して、RESTfulサービスのコントローラーと「通信」し、渡されるデータを取得します、表示するためにそのデータをビュー(Javascript、JSPなど)に戻します。 私は正しい道にいますか?RESTfulサービスには認証の側面もあることは理解していますが、概念的にはまだありません(そして、私のプロジェクトはプライベートネットワークで使用されるため、現時点ではセキュリティは優先されません)。 洞察、批判、知識、フィードバック、または明確化は大歓迎です。

2
RESTful APIがファイルまたは場所を返すことができるか
これはしばらくの間私を困惑させてきました。 たとえば、システムに基本的なコンテンツを提供し、JSONを消費および生成するREST APIがあります。このエンドポイントでは、画像と説明へのURLを生成し、次のように検索されます:// localhost / myApi / pictures / 1 { id: 1, description: "This is a pretty picture of a daisy", URL: <OUR URL> } これで、OUR_URLは、たとえば// localhost / myApi / files / pictures / 1などのAPI上の場所を指す必要があります。これにより、JPGが返されます(APIの背後にあるアプリケーションがファイルの物理的なコンテンツを読み取り、それをクライアントにストリーミングします。 )。これは、JSON応答を生成する他のAPIとは明らかに異なり、実際のファイルの読み取りとストリーミングによるオーバーヘッドが発生します。 または、OUR_URLがRESTサービスのスコープ外のURLを指すようにして、//localhost/files/pictures/1.jpgがファイルを直接読み取るようにする必要があります。 だから問題は: RESTful APIはファイルを返すことができるのでしょうか、それとも単なる場所を返すのでしょうか?

4
MVCおよびRESTful APIサービス
MVCは非常に単純です。モデル、コントローラー、ビューがあります。Webサイトを作成すると、クライアントがRESTキーワード要求をサーバーに送信するときにすべてがまとめられます->サーバーは要求されたURLをコントローラーアクションに一致させます->データ収集/処理のためにモデルを呼び出し、結果を取得します->そして、結果をHTMLページ(ビュー)としてクライアントに返します。 純粋なRESTful API Webサービスについて話している場合はどうなりますか?次に、クライアントはRESTキーワード要求をサーバーに送信します->サーバーは要求されたURLをコントローラーアクションに照合します->データ収集/処理のためにモデルを呼び出し、結果を取得して->戻ります結果をJSONでクライアントに返します。以前と同じですが、「ビュー」はありません...むしろ、生成されたJSONは「ビュー」と考えることができます。ある意味では、MVCのMC部分のみを使用しています。それはどのように行われるべきですか?または、MVCの代わりにAPIのみのサービスに適した他のパターンはありますか?

3
RESTを使用してリクエストを処理する場合とAJAXを使用してリクエストを処理する場合[終了]
休業。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善してみませんか?詳細を追加し、この投稿を編集して問題を明確にしてください。 6年前休業。 私のWebページで、動的なドロップダウン(選択した国に基づく都市名など)を表示したい場合は、AJAXを使用して表示できます。しかし、REST呼び出しを使用してそれを行うこともできます。どちらを使用すればよいですか? 私の問題は、RESTと他のHTTPブラウザーリクエストの違いがまったくわからないことです(フォーム送信)。RESTの正式な定義を見てきましたが、HTTPリクエストと同じように見えます。では、RESTは本質的にAJAXとどう違うのでしょうか?
12 rest  ajax 

7
列挙に特別な値「ALL」を含めることは良い習慣ですか?
私はマイクロサービス環境で新しいサービスを開発しています。これはRESTサービスです。簡単にするために、パスが/ historyBooksであるとしましょう そして、このパスのPOSTメソッドは、新しい履歴ブックを作成します。 歴史書が歴史の1つ以上の時代をカバーしていると仮定しましょう。 簡潔にするために、人間の歴史の次の時代しかないと仮定しましょう。 古代 ポストクラシック モダン 私のコードでは、それらをで表現したいと思いenumます。 メソッドの本体(ペイロード)はJSON形式であり、フィールド名を含める必要がありますeras。このフィールドは、eraこの本で扱う値のリストです。 本体は次のようになります。 { "name": "From the cave to Einstein - a brief history review", "author": "Foo Bar", "eras": ["Ancient", "Post Classical", "Modern"] } この特定のサービスでは、ビジネスロジックは次のとおりです。 入力に時代が指定されていない場合、この本はすべての時代を網羅していると見なされます。 APIレビューでは、すべての時代が網羅されていることを明示的に示すために、時代の列挙に 別の値を含めることを提案しましたALL。 長所と短所があると思います。 長所: 明示的な入力 短所: リスト内の2つの項目が提供されている場合、と言うALLとAncient-アプリケーションから取得されますでしょうか?これでALL他の値が上書きされるはずですが、それは新しいビジネスロジックです。 特定の時代を対象とする書籍のクエリを実行する場合、すべての時代を対象とする書籍をどのように表現しますか?場合ALLも(同じロジックを使用して)出力に使用され、それが解釈する消費者の責任だALLとは["Ancient", "Post Classical", "Modern"]。 私の質問 新しいALLものを持つことは、まったく持たないことよりも混乱を引き起こすと思います。 どう思いますか?このALL値を追加しますか、それなしでAPIを保持しますか?
11 rest  api  json  enum 

1
2000以上のクライアントマシンのアプリケーションサーバーとしてのRESTサービス。それは良い考えですか?
2000以上のマシンにデプロイされるjavaFxのUIを使用してシステムを構築します(最小は2000ですが、さらに多くなります-5000台のマシンに到達できます)。 他の理由/制限のため、マシンにインストールする必要があるため、Webブラウザーインターフェイスでは実行できません。 2000台以上のマシンは、異なる地理的ロケーショングループに属します。一般に接続は良好ですが、より多くの遠隔地ではそれほど良好ではない場合があります。 データベースに直接アクセスする代わりに、Spring + Spring Boot + Spring Data(java)を使用してRESTサービスクラスターを構築することを考えています。 RESTサービスはJsonを受け入れて返します。 私はそれが良い考えだと思う: サービスはデータベース接続プールとして機能します(データベースで2000以上の接続を行うと問題が発生すると思います)。 一部のクエリを処理するために、他の読み取り専用データベースへのログ配布を備えたデータベースを使用することができます。 より多くのマシンを追加してRESTサービスを実行できるため、スケーラビリティが向上します。 セキュリティおよび帯域幅節約の理由で、圧縮されたHTTPSを使用することができます。 2000以上のマシンを再デプロイせずに、ビジネスエンティティに集中的な変更を加えることができます。 他のシステムとの統合性が向上します(RESTサービスをポイントするだけです)。 それは本当に良いアイデアですか? 肯定的または否定的な経験を共有できますか? ありがとうございました。
11 java  design  rest  spring 

2
安らかなサービスで順序付きリストリソースを設計するにはどうすればよいですか?
私はこの同じ問題に何度も遭遇しましたが、私が本当に最適だと感じた解決策は見つかりませんでした。 アプリで言うと、順序付けられたリストがあり、ユーザーがドラッグアンドドロップなどでその順序を変更できるようにします。順序の変更を保持したい場合。どのようにモデル化しますか? 順序付きリストリソースの安らかなサービスを設計するにはどうすればよいですか? 具体的には、どのように私が設計する必要がありますlistし、item安らかなリソースのモデルを?私が見た最も一般的なデザインは、またはプロパティitemを持つエンティティです。私が聞いた別のアプローチは、アイテムの二重リンクリストです。orderposition データベースへの書き込みが多すぎず、クライアントの更新と読み取りが一般に高速なアプローチとは何ですか?エンドポイントはどのように公開されるべきですか?

3
非CRUD操作を処理するREST APIを設計する方法は?
SOAPベースのサービスのセットをRESTful APIに変換しようとしています。 オペレーション名を分析してリソースを識別することから始め、リソースを取得しましたSubscription。 サブスクリプションの状態を更新する必要がある場合POST、リソースに直接アクセスできないため、サーバーに単純に要求を送信することはできませんが、RPCスタイルの操作を呼び出してプロパティを更新する必要があります。さらに、サブスクリプションの状態を「アクティブ」に変更する場合にのみ、外部サービスへの追加の呼び出しが必要です。 これらの場合、基礎となる操作を処理するためのベストプラクティスは何ですか? 私が思いついた解決策は、クエリパラメータを使用することです。そのため、アクティベーションサービスを呼び出す必要がある場合は、次のようなものを使用できます。 POST /subscriptions/{subscriptionid}/?activate=true Subscriptionオブジェクトのフィールドを直接更新できないことを考えると、この種の変換を処理するベストプラクティスはありますか? 更新1: POSTリクエストの本文にいくつかの値、たとえば「state」:「active」を入れることができます サービス内でトリガーされる適切な操作を確認します。

7
HTTPS経由の認証はアプリケーションを遅くしますか?
WebアプリケーションとRESTful Webサービスを構築しています。 Webサービスへのリクエストを認証する最良の方法に関するさまざまな記事を読んでいます。 私にとって最良のオプションは、HTTP基本認証を使用することです。私が読んだほとんどすべての記事は、認証はSSLまたは同等のもので暗号化されるべきだと言っています。 私はこれが何を含むのか完全にはわかりません。これは、Webサービス全体が安全なサーバー上にある必要があるということですか?これは遅くなりますか?

2
REST APIの認証の設計
私は、RESTサービス用のAPIを作成しています。これは、作成と消費の両方を行います。私は過去数日間、認証をうまく処理する方法を見つけようとして過ごし、最終的に何かを思いついたと思います。 アプリケーションスタックに関する次の事実に基づいて、これを考えています。 クライアントとサーバーは.NET4にあります(クライアントプロファイルのクライアント部分) サーバーはWCF RESTを使用して公開します アプリのユーザー名とパスワードをメモリに保持したくない 3から、トークン認証の形式を使用したかったため、サーバーによって資格情報が検証された後、クライアントはアプリの残りの部分で使用するトークンを取得します(これにより、ユーザーのタイムアウト、Webバージョンとデスクトップバージョン間でのシームレスなユーザーの移動など)。通話をリプレイし、改ざん防止する方法を考えた後、次のことを思いつきました。 クライアントは認証を試みる前に、ECDiffieHellmanCngクラスを使用してDiffie-Hellmanキーペアを生成します。 鍵ペアの公開部分をユーザー名とパスワードとともに有線で送信します(もちろんHTTPS経由)。 サーバーはユーザー名とパスワードの組み合わせを認証し、成功した場合、次のことを行います。 一意のセッショントークンを作成します 独自のDHキーペアを生成し、クライアントから提供された公開キーから共有シークレットを計算します データベース内のセッショントークン、共有シークレット、ユーザー、および「最終アクション」時間(ローリング有効期限ウィンドウに使用)をメモします。 セッショントークン、その公開DHキー、および認証成功メッセージを返します クライアントは、応答からDHキーを取得し、共有シークレットを計算し、トークンとシークレットの両方をメモリに保存します。 この時点から、セッショントークン/シークレットの組み合わせは、他のほとんどのREST APIと同様に機能し、要求のフィンガープリントとタイムスタンプが付けられ、何らかのHMACが生成されます。クライアントがサーバーに対してアクションを実行するたびに、トークン/シークレットペアをチェックし、有効で期限切れでない場合はアクションを許可し、セッションの最後のアクションレコードを更新します。 明らかな欠陥は見当たらず、おそらくこのために過剰に設計されていますが、ある時点でこれを行う方法を学ぶ必要があります。HMACはリプレイ攻撃を防ぎ、DHネゴシエーションはMITM攻撃を防ぐのに役立ちます(HMAC / DHの間で頭の上の実行可能な攻撃を考えることはできません)。 誰でもこれを突くことができる穴はありますか?

5
RESTfulデザインをWebサイト全体に適用していますか?
これらはすべて非常に新しいものに出くわすかもしれませんが、完全にRESTfulなWebサイトの設計に頭を包もうとしています。私は、ユーザー、写真、ブログ投稿などのようなものにRESTfulデザインを適用することを理解しています。なぜなら、それらは「オブジェクト」のようなものだと思うからです。 しかし、「私たちについて」ページについてはどうでしょう。それはどのようなリソースですか?それは言葉のRESTfulな意味でのリソースでもありますか?また、「http://www.example.com/」というURLにアクセスするとします。どのリソースを要求していますか?インデックスリソース?

2
子オブジェクトを投稿し、すべての親のすべての子を取得するためのAPIエンドポイントを設計するにはどうすればよいですか?
たとえば、クライアント、レポートなどのエンティティがあります。クライアントには多くのレポートがある可能性があり、単一のレポート管理のエンドポイントは次のようにネストする必要があると思います。 /clients/{client_id}/reports/{report_id} 1つのクライアントのすべてのレポートに関しては、エンドポイントが期待されます。 /clients/{client_id}/reports しかし、すべてのクライアントのすべてのレポートを取得して、APIの一貫性と適切な設計を維持するためのエンドポイントをどのように見ればよいか 私のアプローチ: (私はそれをいくつかのgoogle apiで見ました)それの代わりに「-」を使用し、それを「すべて」として解析します: /clients/-/reports これはエンドポイントのフォーマットを同じに保ちますが、少し変わって見え、この方法を示唆するrfcを見つけることができません。 すべてのレポートのためだけに別のエンドポイントを作成します。 /reports ただし、クライアントのレポートを取得するには、次のようにします。 /clients/{client_id}/reports エンドポイントをリファクタリングして、「クライアント」を親ではなく、単なるフィルタパラメータにします。 /reports?client={client_id} -1つのクライアントのレポート /reports -すべてのクライアントのレポート 特定のクライアントのレポートを投稿するための新しいエンドポイントを追加する場合、URLにパラメーターを持つPOSTリクエストになるため、見栄えが悪くなる可能性があります。 他にアイデアの提案はありますか?
11 rest  api  api-design 

4
楽観的ロックが機能しない場合はどうすればよいですか?
私は次のシナリオを持っています: ユーザーがETagに対してGETリクエストを/projects/1行い、ETagを受け取ります。 ユーザーは、ステップ1のETag を使用してPUTリクエストを/projects/1行います。 ユーザーは/projects/1、ステップ1のETag を使用して別のPUTリクエストを行います。 ETagが古くなっているため、通常、2番目のPUTリクエストは412応答を受け取ります。最初のPUTリクエストがリソースを変更したため、ETagは一致しなくなりました。 しかし、2つのPUT要求が同時に(またはちょうど1つずつ)送信された場合はどうなりますか?最初のPUT要求には、PUT#2が到着する前にリソースを処理および更新する時間がないため、PUT#2がPUT#1を上書きします。楽観的ロックの要点は、それが起こらないようにすることです...

3
HTTPヘッダーを介してアクセストークンを送信しても安全ですか?
これは最初のRESTful Webサービスであり、セキュリティの問題が心配です。アクセストークンをHTTPヘッダー経由で送信しても安全ですか?例えば: POST /v1/i/resource HTTP/1.1 Content-Type: application/x-www-form-urlencoded Api-key: 5cac3297f0d9f46e1gh3k83881ba0980215cd71e Access_token: 080ab6bd49b138594ac9647dc929122adfb983c8 parameter1=foo&parameter2=bar を介して行われた接続SSL。また、scopeすべての属性として定義する必要があるものaccess token

1
トンネリングに関するREST APIルール
ただ、はでこれを読んでREST APIルールブック:GETとPOSTは、トンネル他のリクエストメソッドに使用することはできません。 トンネリングとは、メッセージの意図を覆い隠したり、虚偽の表現をしたり、プロトコルの透過性を損なうHTTPの悪用を指します。REST APIは、HTTP語彙が制限されているクライアントに対応するために、HTTPのリクエストメソッドを誤用してその設計を損なうことがあってはなりません。このセクションのルールで指定されているHTTPメソッドを常に適切に使用してください。[私のハイライト] しかし、その後、フレームワークの多くは、使用トンネリングをするので、HTMLフォーム経由でRESTインターフェースを公開する<form>だけ知っているGETとPOST。私の最新の例はMethodRewriteMiddlewareフラスコ用です(フレームワークの作者が提出):http : //flask.pocoo.org/snippets/38/。 Webフレームワークのハッキングやアドオンなしで「ルール」に準拠する方法はありますか?
11 api  rest  web-framework  http 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.