好吧,我明白了互联网是如何工作的基本概念:客户端发送请求,服务器发回响应。但是我在尝试开发一个 Rails 应用程序时遇到了诸如 RESTful 架构、http 请求(GET、POST 等)、xhr 请求之类的东西。因此,我认为如果有人可以详细解释这些东西是什么以及它们如何在 CRUD 网络应用程序中组合在一起,那就太好了。
3 回答
好的,我试一试:
为什么要使用 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)进行这些调用。
每种方法都存在挑战,但希望这会有所帮助。
我无法直接回答你的问题。但是,客户端-服务器关系可以非常简单。前段时间,我试图了解它在实践中是如何工作的,并从 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 中的这些东西有很大帮助。
对于 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 )