2013-02-03 3 views
4

글쎄, 나는 인터넷이 어떻게 작동하는지에 대한 기본적인 생각을 가지고있다 : 클라이언트는 요청을 보내고, 서버는 응답을 보낸다. 하지만 난 레일 애플 리케이션을 개발하려고하고 RESTful 아키텍처, HTTP 요청 (GET, POST 등), xhr 요청과 같은 것들을 만났습니다. 그래서 누군가가 이러한 것들이 무엇인지, CRUD 웹 앱에서 어떻게 함께 모으는지에 대한 자세한 설명을 줄 수 있다면 좋을 것이라고 생각했습니다.동적 웹 앱은 어떻게 작동합니까?

+0

"동적 웹 앱 작동 방식"은 질문의 세부 사항과 다른 질문이라고 생각합니다. http://www.serverwatch.com/tutorials/article.php/2199701/What-does-Dynamic-Web-Application-Really-Mean-.htm에 나열된 동적 웹 앱에는 목록에있는 기능 (안심, xhr 요청 등) – Thronk

답변

6

좋아요.이 사진을 줄 것입니다 :

RESTful 아키텍처를 사용하는 이유는 무엇입니까?

요즘 많은 웹 애플리케이션에서 사람들은 데이터베이스와 애플리케이션 사이에 REST API를 구축하고 있습니다.

REST API는 웹 응용 프로그램에 데이터를 제공하며 서버 측 (페이지가 사용자에게 전송되기 전에) 또는 클라이언트 측 (사용자가 페이지를 다운로드 한 후)에서 호출 할 수 있습니다.

향후 프로젝트에서도 활용할 수 있습니다. 예를 들어 웹 사이트가 시작되고 기본 모바일 앱이 필요하다고 가정 해 보겠습니다. 기존 REST API를 다시 사용하여이를 수행 할 수 있습니다.

HTTP 동사 유일한 HTTP 동사가 ( http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods) 대부분의 웹 개발자가 사용 오랫동안

는 GET과 POST했다.

대개 조치를 취하지 않은 기존 HTTP 동사에서 데이터를 처리하는 REST 서비스. 따라서 REST 호출로 오브젝트를 삭제하려는 경우 DELETE verb를 예제로 사용하십시오.

HTTP 동사는 REST 서비스에 데이터를 조작하는보다 직관적 인 방법을 제공합니다.

XHR은

XHR 요청 (http://en.wikipedia.org/wiki/XMLHttpRequest를) 요청 - AJAX를 호출을 단지 방법입니다. 클라이언트 (웹 페이지를 가져 오는 사람)가 REST 서비스를 직접 호출한다는 아이디어가 있습니다.

하지만 큰 차이점은 페이지를 새로 고치지 않고도 "백그라운드에서"또는 다른 말로 통화가 이루어진다는 것입니다. 새로운 이메일을 받으면 Gmail이 어떻게 작동하는지 생각해보십시오. 브라우저에서 전체 페이지가 새로 고쳐지지는 않습니다. 더 나은 사용자 환경을 제공합니다.

어떻게 함께 작동합니까?

요즘 웹 응용 프로그램을 만들 때 데이터베이스에서 데이터를 제공하는 REST 서비스/API를 갖는 것이 일반적입니다. 그런 다음 웹 애플리케이션에서 해당 REST 서비스에 액세스 할 때 Java/C#/Ruby/whatever 또는 클라이언트 측 (Javascript)에서 서버 호출을 수행할지 여부를 결정할 수 있습니다.

각 접근 방식에는 여러 가지 문제점이 있지만 잘하면 도움이됩니다.

+0

이 답변을 보완하면서 애플리케이션은 RESTful 일뿐만 아니라 (API뿐 아니라) 리소스 지향 아키텍처에서 사용자 용 애플리케이션과 API가 모두 동일한 자원. 몇 줄에서 설명하기는 어렵지만 L. Richardson, S. Ruby와 같은 멋진 책이 있습니다. RESTful 웹 서비스. O'Reilly, 2007. –

0

레일 CRUD 프로젝트의 경우이 튜토리얼 (http://guides.rubyonrails.org/getting_started.html)을 살펴보고 CRUD 작업이있는 기본 웹 앱을 보여줄 것이므로 REST API를 추가하여 실험 해 볼 수 있습니다. 블로그 게시물을 만들거나 REST API를 사용하여 게시물에 댓글을 추가 할 수 있습니다. 여기에서 많은 리소스를 찾을 수 있습니다 (http://ruby.railstutorial.org/chapters/following-users#sec-rest_api)

0

질문에 직접 답할 수 없습니다. 그러나 클라이언트 - 서버 관계는 매우 간단 할 수 있습니다.얼마 전 나는 그것이 실제로 어떻게 작동했는지 이해하려고 노력했으며 자바 관점에서 이것을 수행했다. 그래서 몇 가지 코드를 썼다. 나는 이것을 이미 한동안 사용 해왔다. 기본적인 아이디어는 어떤 종류의 클라이언트 응용 프로그램이 있는데, 일부 날짜가 지나면 서버로 보내지고 서버는 파일에 저장합니다.

클라이언트 측 : 어쩌면 그것은 당신이 당신을 어떻게해야하는 방법을 이해하는 데 도움이 될 수

  try { 
       // Establish connection with the server 
       Socket socket = new Socket(host, 8000); 

       // Create an output stream to the server 
       ObjectOutputStream toServer =new ObjectOutputStream(socket.getOutputStream()); 
       String playerIPClean=socket.getLocalAddress().getHostAddress(); 
       String s=""; 
# you can put your data here in this string and send everything in this string 
# (afterwords you split the data) 

       toServer.writeObject(s); 
       toServer.close(); 
       socket.close(); 
      } 
      catch (IOException ex) { 
       System.err.println(ex); 
      } 

클라이언트는 문자열을 보낼 요청을 보냈습니다! 서버 측 :

 public TheServer() { 
     try { 
      // Create a server socket 
      ServerSocket serverSocket = new ServerSocket(8000); 
      System.out.println("Server started "); 
      PrintWriter outputToFile=null; 
      while (true) { 
      // Listen for a new connection request 
      Socket socket = serverSocket.accept(); 

      // Create an input stream from the socket 
      inputFromClient = 
       new ObjectInputStream(socket.getInputStream()); 

      // Read from input 
      Object object = inputFromClient.readObject(); 
      textContent=object.toString(); 
      textContent=object.toString(); 
      String fileNameComposer; 
      fileNameComposer=fileName+"rew"+reward+"."+expName+"prize"; 
    //  System.out.println(fileName); 
      try{ 
       outputToFile=new PrintWriter(new FileWriter(fileNameComposer)); 
       outputToFile.println(object); 
      } 
      catch (IOException e) { 
       System.err.println("Caught IOException: " 
            + e.getMessage()); 

      } finally { 
       inputFromClient.close(); 
       if (outputToFile != null) { 
        System.out.println("Closing PrintWriter"); 
        outputToFile.close(); 
       } 
       else { 
        System.out.println("PrintWriter not open"); 
       } 
      } 


      System.out.println("A new object is stored"); 
//   System.out.println(object); 
      } 
     } 
     catch(ClassNotFoundException ex) { 
      ex.printStackTrace(); 
     } 
     catch(IOException ex) { 
      ex.printStackTrace(); 
     } 
     finally { 

      try { 
//   inputFromClient.close(); 
    //  outputToFile.close(); 
      } 
      catch (Exception ex) { 
      ex.printStackTrace(); 
      } 
     } 
     } 

끄기 물론, 서버 응용 프로그램이 지속적으로 아무것도 받아 실행되어야한다 (나는 이것을 이해하는 데 시간이 걸렸다). 서버는 요청을 승인하고 문자열을 수신 한 후 저장합니다. 이 아이디어는 Java에서 매우 쉽습니다. 실제로 Liang의 Java 책은 Java에서이 내용을 이해하는 데 많은 도움을주었습니다.

관련 문제