タグ付けされた質問 「web-services」

Webサービスは、ネットワークを介した相互運用可能なマシン間の相互作用をサポートするように設計されたソフトウェアシステムです。

3
予測される変更を計画しているRESTエンドポイントの推奨パターンは何ですか
変更のための先見の明を持つ外部アプリケーション用のAPIを設計しようとすることは簡単ではありませんが、少し前もって考えておくことで、後で生活が楽になります。私は、以前のバージョンのハンドラーをそのままにしておくことで、後方互換性を維持しながら将来の変更をサポートするスキームを確立しようとしています。 この記事の主な関心事は、特定の製品/会社に対して定義されたすべてのエンドポイントでどのパターンに従う必要があるかです。 基本スキーム のベースURLテンプレートを考えると、https://rest.product.com/すべてのサービスが/api、/authおよびなどの他の非レストベースのエンドポイントと共に存在することを考案しました/doc。したがって、次のようにベースエンドポイントを確立できます。 https://rest.product.com/api/... https://rest.product.com/auth/login https://rest.product.com/auth/logout https://rest.product.com/doc/... サービスエンドポイント 次に、エンドポイント自体について説明します。懸念はPOST、GET、DELETEこの記事の主な目的ではなく、それらのアクション自体に懸念されます。 エンドポイントは、名前空間とアクションに分類できます。また、各アクションは、戻り値の型または必須パラメーターの基本的な変更をサポートする方法で表示される必要があります。 登録されたユーザーがメッセージを送信できる架空のチャットサービスを利用すると、次のエンドポイントがある場合があります。 https://rest.product.com/api/messages/list/{user} https://rest.product.com/api/messages/send 今度は、壊れる可能性のある将来のAPI変更に対するバージョンサポートを追加します。私たちは、どちらかの後にバージョンの署名を追加することができ/api/たりした後/messages/。与えられたsendエンドポイント我々は、v1の以下のものを持つことができます。 https://rest.product.com/api/v1/messages/send https://rest.product.com/api/messages/v1/send だから私の最初の質問は、バージョン識別子の推奨場所は何ですか? コントローラーコードの管理 そのため、以前のバージョンをサポートする必要があることを確立しました。そのため、時間の経過とともに廃止される可能性のある新しいバージョンのそれぞれのコードを何らかの方法で処理する必要があります。Javaでエンドポイントを記述していると仮定すると、これをパッケージで管理できます。 package com.product.messages.v1; public interface MessageController { void send(); Message[] list(); } これには、すべてのコードがネームスペースを介して分離されているという利点があります。この場合、重大な変更はサービスエンドポイントの新しいコピーを意味します。これの不利な点は、すべてのコードをコピーする必要があり、新しいバージョンと以前のバージョンに適用するバグ修正を各コピーに適用/テストする必要があることです。 別のアプローチは、エンドポイントごとにハンドラーを作成することです。 package com.product.messages; public class MessageServiceImpl { public void send(String version) { getMessageSender(version).send(); } // Assume we have …

2
JSONからProtobufに移行します。その価値はありますか?
XMLまたはJSON(WCF)を提供できるREST Webサービスがあります。Protobufsを実装するというアイデアをいじっています。どうして? 長所 サーバーの負荷が少ない。 メッセージサイズが小さい-トラフィックが少ない。 後で切り替えるよりも、すぐに切り替える方が簡単です。 短所 実装する必要がある デバッグ用のメッセージのトラブルシューティング/スニッフィングが難しくなります。 サーバーでGZipを有効にすると、JSONは同じ量のトラフィックを消費します これについてのあなたの提案や経験は何ですか?

5
Webサービス呼び出しを必要とするクラスを単体テストするにはどうすればよいですか?
いくつかのHadoop Webサービスを呼び出すクラスをテストしようとしています。コードはほぼ次の形式です。 method() { ...use Jersey client to create WebResource... ...make request... ...do something with response... } たとえば、ディレクトリ作成メソッド、フォルダ作成メソッドなどがあります。 コードが私が制御できない外部Webサービスを処理していることを考えると、これをどのように単体テストできますか?Webサービスのクライアント/レスポンスをモックすることはできましたが、最近見た「所有していないオブジェクトをモックしないでください」というガイドラインに違反しています。ダミーのWebサービス実装をセットアップできます。それでも「単体テスト」を構成できますか、それとも統合テストになりますか?この低いレベルで単体テストを実行することはできませんか?TDD実践者はどのようにこれに取り組むのでしょうか?

4
REST vs RESTful vs「通常の」Webサービス-同じかどうか
RESTやRESTfulアプリケーションに関する定義と議論をいくつか読みましたが、それが本当の意味をまだ理解していません。 私は通常、GETを介してデータを取得するか、POSTを介してデータベースからデータを取得するかデータベースに書き込むWebサービス(通常はPHPスクリプト)にデータを送信するアプリを使用します。 さて、これはRESTfulアプリですか?そうでない場合、RESTfulアプリはどうなりますか?RESTfulコンセプトとこれまでに取り組んだコンセプトの違いは何ですか?例で説明してください。 また、誰かがRESTについて話し、誰かがRESTfulアプリについて話します。RESTという用語は理論的な概念を指すのに対して、特定のアプリについて話すときにはRESTfulが使用されることがわかりました。これは正しいのですか、それともRESTアプリとRESTfulアプリの間に本当の違いがありますか?

4
モバイルクライアントとサーバー間の参照整合性の維持
だから私は比較的単純なシステムを持っています。モバイルクライアントは、私が(他のモバイルクライアントと共有されている)は、リモートSQLサーバーに同期しているしたいとSQLiteのデータベースのレコードを作成します。そのため、電話のsqliteテーブルに新しいレコードを作成するとき、その変更をRESTful APIを介してリモートサービスにプッシュします。私が抱えている問題は、データの衝突がないようにプライマリキーをどのように注文するかです(つまり、電話のレコードはサーバー上の完全に異なるレコードと同じプライマリキーを持っています)。クライアント上のレコードを参照し、サーバー上の同じレコードを参照するための通常の「ベストプラクティスは何ですか?」
21 sql  web-services 

4
なぜ人々はSOAPが廃止されると考えるのですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 今日のSOを閲覧中に、私はこの質問をここで見つけました、そして、それはこれで始まります: 確かに、SOAPは絶望的であり、すべてを使用することを余儀なくされていることを教えてくれます 今までSOでこのような声明をたくさん見つけましたが、これは私にこの質問をするきっかけになりました。 RESTには用途があり、SOAPには用途があり、機能として交差する場所もありますが、相互に交換することはできません。 だから、なぜ人々はSOAPが「非推奨」だと思うのだろうか?それは無知ですか?SOAPおよびWS- *仕様の複雑さ RESTの誇大広告?何? SOAPが廃止されると思われる場合は、その理由を教えてください。私は興味がある!
20 web-services  soa  soap 

2
誰かがSSL証明書の保証を請求したことがありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 8年前に閉鎖されました。 SSL証明書は、多くの場合、たとえば50万ドルや100万ドルなど、さまざまな量の保証または保証を公示します。 私の質問は、SSLの歴史の中で、これらの保証の1つを実際に成功させた人はいますか?事例はありますか?そうでない場合、それらが単なるマーケティングの仕掛けであると仮定するのは公平ですか?

4
GraphQLの代わりにSQLを使用しないのはなぜですか?
最近、RESTfulより優れていると主張するGraphQLについて学びました。しかし、なぜ単純にSQLステートメントをHTTP GETリクエストに入れないのだろうと思い始めました。 たとえば、GraphQLでは次のように記述します { Movie(id: "cixos5gtq0ogi0126tvekxo27") { id title actors { name } } } これは、対応するSQLよりもそれほど単純ではありません SELECT id, title FROM movies WHERE id = cixos5gtq0ogi0126tvekxo27; SELECT actors.name FROM actors, actors_movies WHERE actors.id == movies.actor_id AND movie.id == cixos5gtq0ogi0126tvekxo27; クエリをURLエンコードしてサーバーに送信することができます GET endpoint?q=SELECT%20id%2C%20title%20FROM%20movies%20WHERE%20id%20%3D%20cixos5gtq0ogi0126tvekxo27%3B%0ASELECT%20actors.name%20FROM%20actors%2C%20actors_movies%20WHERE%20actors.id%20%3D%3D%20movies.actor_id%20AND%20movie.id%20%3D%3D%20cixos5gtq0ogi0126tvekxo27%3B HTTP/1.1 はい、クエリURLは長すぎる可能性がありますが、RESTへの準拠を気にしない場合は、POST要求の本文に含めることができます。(ところで、RESTが意味をなすようにHTTP RFCを改訂する必要があると思います:クエリ文字列の長さを制限することは、実装を最初の段階で仕様と混合します) クライアントからSQLを直接発行することには、次の利点もあります。 GraphQLを解析するためにサーバー側のコード/ライブラリは必要ないため、開発時間が短縮されます。 GraphQLを解析するためにサーバー側のオーバーヘッドは必要ないため、実行時間が短縮されます。 SQLステートメントは、GraphQLよりもはるかに柔軟性があります。なぜなら、ほとんどの場合、後者はSQLに還元されるからです。 誰もがSQLを知っています。 それでは、GraphQLがSQLより優れている点は何ですか?


5
内部および外部APIアーキテクチャ
私が働いている会社は、長年にわたって「有機的に」成長した成功したSaaS製品を維持しています。既存の製品とデータを共有する一連の新製品でラインを拡大する予定です。これをサポートするために、ビジネスロジックを1つの場所、つまりWebサービスレイヤーに統合することを検討しています。WSレイヤーは以下によって使用されます。 Webアプリケーション データをインポートするツール 他のクライアントソフトウェアと統合するためのツール(APIそのものではありません) また、それを使用して独自の統合を作成できるお客様が使用できるAPIを作成したいと考えています。次の質問に取り組んでいます: 内部API(別名WSレイヤー)と外部APIは同じものであり、セキュリティとアクセス許可の設定により、誰が何を実行できるかを制御するか、外部APIが内部APIを呼び出すだけの2つの別個のアプリケーションである必要があります他のアプリケーションのように?これまでの議論では、それらを分離する方が安全かもしれませんが、オーバーヘッドが追加されます。 同様の状況で他の人は何をしましたか?
19 api  web  web-services 

3
RESTful APIでのトークン更新/セッション有効期限の処理
ユーザー認証にJWTトークンを使用するRESTful APIを構築しています(loginエンドポイントによって発行され、その後すべてのヘッダーで送信されます)。一定時間後にトークンを更新する必要がありrenewます(エンドポイントを呼び出して、更新されたトークンを返します) )。 トークンの有効期限が切れる前にユーザーのAPIセッションが無効になる可能性があるため、エンドポイントはすべて、1)トークンがまだ有効で、2)ユーザーのセッションがまだ有効であることを確認することから開始します。クライアントがトークンをローカルに保存するため、トークンを直接無効にする方法はありません。 したがって、すべてのエンドポイントは、クライアントに次の2つの条件を通知する必要があります。1)トークンを更新する時間、または2)セッションが無効になり、システムへのアクセスが許可されなくなったこと。2つの条件のいずれかが発生したときにクライアントに信号を送るエンドポイントの2つの代替案を考えることができます(クライアントがいずれかのオプションに適応できると仮定します): セッションが無効になった場合はHTTP 401コード(無許可)を返し、トークンの有効期限が切れてrenewエンドポイントを呼び出すときは412コード(前提条件失敗)を返します。これにより200(ok)コードが返されます。 セッションが無効であるか、トークンの有効期限が切れていることを通知するために401を返します。この場合、クライアントはすぐにrenewエンドポイントを呼び出し、200を返すとトークンが更新されますが、renew401も返す場合は、クライアントがシステム外にあることを意味します。 上記の2つの選択肢のうち、どちらをお勧めしますか?どちらがより標準的で、理解しやすく、そして/またはよりRESTfulでしょうか?または、まったく別のアプローチをお勧めしますか?どちらのオプションにも明らかな問題やセキュリティ上のリスクがありますか?回答にあなたの意見を裏付ける外部参照が含まれている場合の追加ポイント。 更新 皆さん、本当の質問に焦点を合わせてください- 更新/セッションの無効化を通知するための2つのHTTPコードの選択肢のうち、どちらが最適ですか?私のシステムがJWT とサーバーサイドセッションを使用しているという事実を気にしないでください、それは非常に特定のビジネスルールのための私のAPIの特性であり、私が助けを求めている部分ではありません;)

7
複数のデータベース呼び出しは、Web APIのネットワーク呼び出しでは本当に重要ですか?
私の雇用主の1人で、REST(しかしSOAPにも適用されます)APIに取り組みました。クライアント(アプリケーションUI)は、API(Web(一般的な運用展開ではLAN)経由で)を呼び出します。APIはデータベースを呼び出します。 私たちの議論で繰り返されるテーマの1つはパフォーマンスです。チームの一部の人々は、パフォーマンスのために1つのAPI呼び出しから複数のデータベース呼び出し(通常は読み取り)を行うべきではないと考えています。各API呼び出しが(正確に)データベース呼び出しを1つだけ持つように最適化する必要があります。 しかし、それは本当に重要ですか?UIはAPIに対してネットワーク呼び出しを行う必要があることを考慮してください。それはかなり大きいです(ミリ秒単位)。データベースは、メモリ内に物事を保持し、読み取りを非常に迅速に実行するように最適化されています(たとえば、SQL ServerはすべてをRAMにロードして保持し、可能な限りすべての空きRAMを消費します)。 TLDR:すでにLAN経由でネットワーク呼び出しを行っているときに、複数のデータベース呼び出しを心配することは本当に重要ですか?もしそうなら、なぜですか? 明確にするために、私は大きさについて話しています-それは仕様(マシンハードウェア、APIとDBの選択など)に依存することを知っています桁違いに少ない呼び出し、実際に問題ですか?それとも、これ以上の問題がありますか? 編集:後世のために、これらの状況下でデータベース呼び出しを組み合わせてパフォーマンスを改善する必要があると主張するのは非常にばかげていると思います-特にプロファイリングがない場合。ただし、これを行うかどうかは私の判断ではありません。これがWeb API呼び出しを最適化する正しい方法であると考える背後にある根拠を知りたいです。

3
SOAサービス構成は実際に機能しますか?
SOAサービスの主要な設計原則の1つは、サービスの構成可能性の原則(https://en.wikipedia.org/wiki/Service_composability_principle)です。 アイデアは、既存のサービスを構成要素として使用して新しいサービスを構成することにより、新しいサービスを迅速に開発できるということです。新しいメソッドを実装するときにオブジェクトのexisingメソッドを呼び出す方法に似ています。これは、SOAによる生産性の向上の多くがもたらされることになっている場所です。 実際に誰かがこれを実際にしていますか?私はこれを文章で延々と繰り返してきましたが、実際の実装を実際に経験したことはありません。また、ほとんどのテキストでは、トランザクション処理に関する記述が省略されています。これは、構成可能なサービスを実現する上で最大の障害であると思われます。 最初に、重要なサービスを作成する前に、トランザクションの問題に取り組む必要があります。もちろん、例にサービス「findCurrentTime()」および「writeLogMessage()」がある場合、トランザクションについて心配することは簡単ですが、「depositMoney()」および「withdrawMoney()」などの実世界の例を持っている場合はそうではありません。 私は2つのオプションを知っています: WS-Atomic Transactionなどを使用して実際のトランザクションを実装する Aへの呼び出しを「cancelA()」またはBへの呼び出しが失敗した場合に何らかの補償を行う補償ベースのソリューションを実装する これらは両方とも非常に問題があるように思われます。 WS-Atomic Transaction 多くの複雑さのは、私は警告したことが最もアドバイス「お尻の痛みは、それを行ういけません」 サポートは制限されています。たとえば、オープンソースのESBを使用する場合、ServiceMix、Mule、またはWSO2の主要な代替はサポートしません 補償 補償の処理を実装することは私にとって非常に複雑に思えます。サービスAが成功し、サービスBから回答を得られず、失敗したか成功したかわからない場合はどうすればよいですか?このようなロジックを(合成サービスの実装者として)手動で処理すると、手首を切り裂きたいと思うようになります。 また、重要なサービスで補償方法を使用する方法もわかりません。サービスAが「depositMoney()」で成功した場合、他のアクションがすぐに別の場所に送金し、「compensateDepositMoney()」を受け取ったとします。ワームの大きな缶のようです。 私にとっては、サービスの構成は非常に基本的なSOAの原則であるため、サービスを(便利に)構成できない場合は、SOAの利点を実際には得られないようです。。現実は何ですか?90%のSOAユーザーは、実際のサービスを使わずに「暗号化されたSOA」を使用していますか?または、ほとんどのユーザーが実際にサービス構成を使用しており、その難しさを誇張していますか?

1
Web APIを保護するためのベストプラクティスは何ですか?
モバイルアプリがサーバーとデータベース(ASP.Net MVC 4にありますが、それはほとんど関係ありません)とやり取りするために、WebサービスAPIを構築する必要があります。ほとんどのアクションではユーザーをサービスに登録する必要はありませんが、アプリのユーザーのみにアクセスを制限したいと思います。 他の場所(たとえば、すべてのデータを必要としている人や非公式アプリを作成している人)からの呼び出しを拒否するための方法は何ですか? 私の最初のアイデアは、デバイスがサーバーにトークンを要求することです。トークンはランダムに生成され、そのまま送信されます。他のすべてのメソッドは、ソルトされたトークンのmd5ハッシュになる特定のヘッダーがリクエストヘッダーに含まれていることを確認します。サーバーはトークンとソルトを認識しており、ハッシュを計算して送信されたものと比較できます。さらに、トークンは限られた寿命であり、デバイスは1時間おきに別のトークンを取得する必要があります。 これは実装が非常に簡単で、おそらく100%の証拠ではありませんが、良いアイデアのようです。どう思いますか?

3
Javaで高度にスケーラブルなWebサービスを設計する方法は?
2000人の同時ユーザーを持つWebサービスを作成しています。このサービスは無料で提供されるため、大規模なユーザーベースを獲得することが期待されています。将来的には、最大50,000ユーザーまで拡張することが必要になる場合があります。 /programming/2567254/building-highly-scalable-web-servicesのような問題に対処する他の質問が既にいくつかあり ます。 ただし、私の要件は上記の質問とは異なります。 たとえば、私のアプリケーションにはユーザーインターフェイスがないため、画像、CSS、javascriptは問題になりません。Javaであるため、HipHopを使用してPHPをネイティブコードに変換するなどの提案は役に立ちません。 したがって、私は個別に質問をすることにしました。 これは私のプロジェクトのセットアップです- Apache CXFを使用したRESTベースのWebサービス Hibernate 3.0(遅延ロードやチューニングのためのカスタムHQLなどの関連する最適化を使用) Tomcat 6.0 MySql 5.5 Javaベースのアプリケーションをスケーラブルにするために従うべきベストプラクティスは何ですか?

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