2016-11-06 11 views
1

私はRest APIリクエストを送信して処理する方法を学びました。したがって、外部ユーザーがAPIへの接続をオープンする方法、リクエストメソッドを設定する方法返されたメッセージを処理します。
しかし、私自身のレストウェブサービスの作成には時間がかかりました。サーバーがどのようにコミュニケーションを処理するかだけに精通していないので、ちょっと残念です。
通信を可能にするように接続を設定することはできますが、接続の詳細は特に気にしません。
以下は、サーバーを初期化する方法です。サーバーを接続し、クライアントが切断するまで何かが接続され、短い会話があるまで待機します。Restサーバーを構築する

public void Initialise(){ 
     try { 
      ServerSocket s = new ServerSocket(21); //TODO: Change port? 
      while(true){ 
       Socket incoming = s.accept(); 
       Runnable r = new ConnectionManager(incoming); 
       Thread t = new Thread(r); 
       t.start(); 
      } 
     } 
     catch(IOException e){ 
     e.printStackTrace(); 
     } 
} 

そして、接続を処理するクラス。私が行う方法のわからないんだけど、何

public class ConnectionManager implements Runnable{ 
private Socket incoming; 

public ConnectionManager(Socket i){ 
    this.incoming = i; 
} 

@Override 
public void run() { 
    try{ 
     try{ 
      //Initialise IOStreams 
      InputStream inStream = incoming.getInputStream(); 
      OutputStream outStream = incoming.getOutputStream(); 

      Scanner in = new Scanner(inStream); 
      PrintWriter out = new PrintWriter(outStream, true); 

      out.println("TODO: Change this message. Press Q to quit."); 

      boolean done = false; 
      while (!done && in.hasNextLine()){ 
       String line = in.nextLine(); 
       out.println("Echo: " +line); 
       if (line.trim().equals("Q")){ 
        done = true; 
       } 
      } 
     } 
     finally{ 
      incoming.close(); 
     } 
    } 
    catch (IOException e){ 
     e.printStackTrace(); 
    } 
} 

}

は、私は残りの要求をリッスンアプリケーションの構築を開始し、それに応じてそれらを処理する方法です。私は、接続を調べると、APIリクエストを処理する機能をエンジニアリングすることができると確信していますが、ユーザーから送信されたRestリクエストの詳細を表示する方法はわかりません。例えば
、ユーザーは私が要求を調べ、その後に応じてそれを処理するにはどうすればよいように

GET exampleAPI/endpoint?params 

として、要求を送信した場合?
は例えば、クライアント側で、あなたは、そのようなあなたがにGETリクエストを送信できるようになる

HttpURLConnection c = (HttpURLConnection) targetURL.openConnection(); 
c.setRequestMethod("GET"); 

のプロセスに従うことができるようになるのHttpURLConnectionを使用するよう要求、アプローチを開始したときターゲットURI。
SocketのJavaドキュメントを見ると、着信要求とアクティブな接続をどのように見ることができるか分かりません。
何か不足していますか、まったく間違っていますか?また

+0

なぜJAX-WSまたはJersyを使用できないのですか?制限はありますか? – developer

+0

答えはありませんが、このためにフレームワークを使用することをお勧めします。彼らはあなたが手で書くことを試みているすべてのものの機能性を提供します。 – UnholySheep

+0

@javaguy制限はありません。私は、Restサーバーを構築する経験が不足しているので、ベストプラクティスとセットアップが不明です。 – Potatosaurus

答えて

3

私は私のコメントで述べたように、あなたはなど、このためではなく、あなたが全体のサーバーのためのロジックを書き換えると、複数のスレッドを処理..ジャージー/春に/ etcを使用することができます。..

、あなたがすべきそのためにはJAX-RSと呼ばれるJDKAPI(仕様と実装)があることをご存じですか?あなたは見ることができますhere

Spring REST Controllerまたはhereジャージーのために見ることができます。

JDK JAX-RS APIを最初にお越しいただき、Spring and Jerseyをご覧ください。

あなたがに興味がある可能性がありJAX-RSを実装する他のベンダーは、あなたがJAX-RS実装のための比較のためにhereを探すことができ、があります。

P.S.:SpringJAX-RS APIに準拠しておらず、むしろ独自のAPIを持っています。

+0

これをJavaで追加します。最も一般的な組み合わせはTomcat + JAX-RS実装です。ジャージー/ジャクソンまたは埠頭 –

+1

はい、私はあなたに同意します – developer

関連する問題