4

好吧,我明白了互联网是如何工作的基本概念:客户端发送请求,服务器发回响应。但是我在尝试开发一个 Rails 应用程序时遇到了诸如 RESTful 架构、http 请求(GET、POST 等)、xhr 请求之类的东西。因此,我认为如果有人可以详细解释这些东西是什么以及它们如何在 CRUD 网络应用程序中组合在一起,那就太好了。

4

3 回答 3

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 请求

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

但最大的不同是调用是“在后台”进行的 - 或者换句话说 - 没有页面刷新。想想当您收到新电子邮件时 Gmail 是如何工作的。您不会注意到整个页面在浏览器中刷新。它只是提供更好的用户体验。

他们如何一起工作?

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

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

于 2013-02-13T20:09:38.580 回答
0

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

客户端:

         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 中的这些东西有很大帮助。

于 2013-02-20T21:15:00.147 回答
0

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

于 2013-02-20T18:36:38.097 回答