动态网络应用程序如何运作?

时间:2013-02-03 16:58:18

标签: http rest web-applications xmlhttprequest

好吧,我得到了互联网如何运作的基本思路:客户端发送请求,服务器发回响应。 但我正在尝试开发一个rails应用程序,我遇到了RESTful架构,http请求(GET,POST等),xhr请求等问题。所以,我认为如果有人可以详细解释这些内容是什么以及它们如何在CRUD网络应用程序中聚集在一起会很棒。

3 个答案:

答案 0 :(得分:6)

好的,我会试一试:

为什么要使用RESTful架构?

对于很多Web应用程序,人们正在数据库和应用程序之间构建REST API。

REST API为Web应用程序提供数据,可以在服务器端(在页面发送给用户之前)或客户端(用户下载页面之后)调用它。

未来的项目也可以利用它。例如,假设您的网站起飞,您也想要一个原生移动应用程序。您可以重用现有的REST API来实现这一目标。

HTTP动词

很长一段时间以来,大多数Web开发人员使用的唯一HTTP动词(http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods)是GET和POST。

REST服务处理扩展现有HTTP动词的数据,这些动词通常没有太多动作。因此,如果要删除带有REST调用的对象,可以使用DELETE谓词作为示例。

HTTP动词只是让您的REST服务以更直观的方式操作数据。

XHR Requests

XHR请求(http://en.wikipedia.org/wiki/XMLHttpRequest) - 只是进行AJAX调用的一种方式。我们的想法是客户端(获取您网页的人)将直接调用您的REST服务。

但最大的区别在于,调用是在“后台” - 换句话说 - 没有页面刷新。想一想当您收到新电子邮件时Gmail的工作原理。您没有注意到整个页面在浏览器中刷新。它只是提供更好的用户体验。

他们如何一起工作?

最近制作Web应用程序时,通常会有一个REST服务/ API来为数据库中的数据提供服务。然后,当从Web应用程序访问该REST服务时,您可以决定是否要在服务器端(来自Java / C#/ Ruby /等)或从客户端(Javascript)进行这些调用。

每种方法都存在挑战,但希望这有所帮助。

答案 1 :(得分:0)

对于Rail CRUD项目,我建议您查看本教程(http://guides.rubyonrails.org/getting_started.html),它会显示一个基本的Web应用程序,它具有CRUD操作,之后您可以尝试尝试添加REST API使用REST API创建博客文章或向帖子添加评论成为可能。你可以在这里找到很多资源(http://ruby.railstutorial.org/chapters/following-users#sec-rest_api

答案 2 :(得分:0)

我无法直接回答您的问题。但是,客户端 - 服务器关系可以非常简单。前段时间我试图了解它在实践中是如何工作的,并从Java Perspective中做到了这一点。所以写了一些代码,我已经使用了一段时间了。基本的想法是,我有一些客户端应用程序,在获得一些日期后,它发送到服务器,服务器将其保存在文件中。也许它可以帮助你理解你应该怎么做:

客户端:

         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中非常容易。实际上,梁的Java书帮助我理解Java中的这些东西。