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