一、關于RESTful架構
REST這詞是Roy Thomas Fielding在他2000年的博士論文中提出的。他利用REST定義了網際網路軟體的架構原則,即Representational State Transfer縮寫,直譯過來就是“表現層狀态轉化”,如果一個架構符合REST原則,就稱它為RESTful架構。REST所指向的是在網際網路中資源屬性,其指明的是“Resources”的表現層,即概括成就是可以利用REST原則建構API能夠找到獨一無二的“資源實體”,如圖檔、音頻、特定的資料等。簡單概述RESTful架構有以下幾個重點:
1.每一個URI代表一種資源;
2.用戶端和伺服器之間,傳遞這種資源的某種表現層;
3.用戶端通過四個HTTP動詞(GET、POST、PUT、DELETE)對伺服器端資源進行操作,實作“表現層狀态轉化”。
具體的可以看建構實作的例子。
二、關于Jersey、Maven
Jersey是JAX-RS(The Java API for RESTful Web Service)标準的參考實作,是Java領域中最純正的REST服務開發架構。
Apache Maven是一款軟體項目管理和了解工具。基于項目對象模型(POM)的概念,Maven可以從中央資訊管理項目的建構,報告和文檔。
三、具體實踐
1.依賴環境JDK、Maven、Tomcat
安裝JDK和Maven時候需要注意的配置環境變量的問題,這其中需要注意的是下載下傳的Maven和Tomcat都是需要時Binary 包,這樣就可以直接解壓後就可以直接運作無需編譯:
1.1.mac環境下:
可以利用vim ~/.bash_profile來配置JDK和Maven的環境變量PATH,配置完成後執行source ~./bash_profile來讓配置檔案生效
#JDK
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
PATH=$JAVA_HOME/bin:$PATH:.
CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.
export JAVA_HOME
export PATH
export CLASSPATH
#Maven
export M2_HOME=/Users/bing/apache-maven-3.5.22
export PATH=$PATH:$M2_HOME/bin
驗證是否配置好,可以在terminal上面輸入mvn -v指令看,系統是否識别如下圖:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4VGbjlGdyF2XhFTZwMWO1QDZzEWY10iM0UzN3gTN1gjMvw1N4UzLcVDOy8CXt92YuQHb1FmZ05WZtdWZz5yYpRXY0NXLldWYtl2Lc9CX6MHc0RHaiojIsJye.jpg)
1.2.Windows環境下:可以通過進階系統設定來配置環境變量
2.利用mvn指令來建立webapp的例子(以mac環境下為例)
sudo mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-webapp \
-DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false \
-DgroupId=com.example -DartifactId=simple-service-webapp -Dpackage=com.example \
-DarchetypeVersion=2.26
cd simple-service-webapp
sudo mvn clean package
這樣就已經把剛才建構基于maven所建構的Jersey RESTful Web Service的war就已經同mvn建構好了
如下圖
3.啟動Tomcat來釋出此Web Service項目
在Apache Tomcat下載下傳Binary的包後,通過Terminal終端進入Tomcat的bin目錄下
bash startup.sh
如此便是已經将web service部署到了Tomcat中了,并且已經釋出了
這樣就可以通過URI來通路我們的項目資源,如在原來的項目中所需要留意的兩個地方是,第一個是webapp檔案夾下web.xml,如下圖
<?xml version="1.0" encoding="UTF-8"?>
<!-- This web.xml file is not required when using Servlet 3.0 container,
see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html -->
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.example</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/webapi/*</url-pattern>
</servlet-mapping>
</web-app>
其中的
<url-pattern>/webapi/*</url-pattern>
中webapi就是通路路徑一個名字,
第二個是項目中具體的java類所定義接口的中path路徑,在此項目中就是MyResource.java
@Path("myresource")
public class MyResource {
/**
* Method handling HTTP GET requests. The returned object will be sent
* to the client as "text/plain" media type.
*
* @return String that will be returned as a text/plain response.
*/
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getIt() {
return "Got it!";
}
}
是以上手的樣例所要通路的URI是:
http://localhost:8080/simple-service-webapp/webapi/myresource/
這樣就可以開始項目具體業務的開發了。
後續會繼續完善Windows和Linux版本的環境的搭建,以及基于Docker容器項目部署。