日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RESTful Web 服务 - 方法

發(fā)布時間:2025/3/21 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RESTful Web 服务 - 方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

正如目前為止我們所討論的,RESTful Web 服務大量使用 HTTP 動詞確定要對指定資源進行的操作。下面的表格演示了常用 HTTP 動詞的例子。

編號HTTP 方法,URI 和操作
1GET?
http://localhost:8080/UserManagement/rest/UserService/users?
獲取用戶列表?
(只讀)
2GET?
http://localhost:8080/UserManagement/rest/UserService/users/1?
獲取 ID 為 1 的用戶?
(只讀)
3PUT?
http://localhost:8080/UserManagement/rest/UserService/users/2?
插入 ID 為 2 的用戶?
(冪等)
4POST?
http://localhost:8080/UserManagement/rest/UserService/users/2?
更新 ID 為 2 的用戶?
(N/A)
5DELETE?
http://localhost:8080/UserManagement/rest/UserService/users/1?
刪除 ID 為 1 的用戶?
(冪等)
6OPTIONS?
http://localhost:8080/UserManagement/rest/UserService/users?
列出 Web 服務所支持的操作?
(只讀)
7HEAD?
http://localhost:8080/UserManagement/rest/UserService/users?
只返回 HTTP 頭,不返回 HTTP 體?
(只讀)

這里是要考慮的要點:

  • GET 操作是只讀且安全的。
  • PUT 和 DELETE 操作是冪等的意味著它們的結果總是相同的,無論這個操作被調用多少次。
  • PUT 和 POST 操作幾乎是相同的,區(qū)別在于 PUT 操作的結果是冪等的,而 POST 操作會導致不同的結果。

示例

讓我們更新一下?RESTful Web 服務 - 第一個應用?教程中創(chuàng)建的例子來創(chuàng)建一個可以執(zhí)行 CRUD(創(chuàng)建,讀取,更新,移除)操作的 Web 服務。簡單起見,這里我們使用文件 I/O 替代數(shù)據(jù)庫操作。

我們來更新一下 com.tutorialspoint 包下面的?User.java,UserDao.java?和?UserService.java?文件。

User.java

package com.tutorialspoint;import java.io.Serializable;import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "user") public class User implements Serializable {private static final long serialVersionUID = 1L;private int id;private String name;private String profession;public User(){}public User(int id, String name, String profession){this.id = id;this.name = name;this.profession = profession;}public int getId() {return id;}@XmlElementpublic void setId(int id) {this.id = id;}public String getName() {return name;}@XmlElementpublic void setName(String name) {this.name = name;}public String getProfession() {return profession;}@XmlElementpublic void setProfession(String profession) {this.profession = profession;} @Overridepublic boolean equals(Object object){if(object == null){return false;}else if(!(object instanceof User)){return false;}else {User user = (User)object;if(id == user.getId()&& name.equals(user.getName())&& profession.equals(user.getProfession())){return true;} }return false;} }

UserDao.java

package com.tutorialspoint;import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.List;public class UserDao {public List<User> getAllUsers(){List<User> userList = null;try {File file = new File("Users.dat");if (!file.exists()) {User user = new User(1, "Mahesh", "Teacher");userList = new ArrayList<User>();userList.add(user);saveUserList(userList); }else{FileInputStream fis = new FileInputStream(file);ObjectInputStream ois = new ObjectInputStream(fis);userList = (List<User>) ois.readObject();ois.close();}} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();} return userList;}public User getUser(int id){List<User> users = getAllUsers();for(User user: users){if(user.getId() == id){return user;}}return null;}public int addUser(User pUser){List<User> userList = getAllUsers();boolean userExists = false;for(User user: userList){if(user.getId() == pUser.getId()){userExists = true;break;}} if(!userExists){userList.add(pUser);saveUserList(userList);return 1;}return 0;}public int updateUser(User pUser){List<User> userList = getAllUsers();for(User user: userList){if(user.getId() == pUser.getId()){int index = userList.indexOf(user); userList.set(index, pUser);saveUserList(userList);return 1;}} return 0;}public int deleteUser(int id){List<User> userList = getAllUsers();for(User user: userList){if(user.getId() == id){int index = userList.indexOf(user); userList.remove(index);saveUserList(userList);return 1; }} return 0;}private void saveUserList(List<User> userList){try {File file = new File("Users.dat");FileOutputStream fos;fos = new FileOutputStream(file);ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(userList);oos.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}} }

UserService.java

package com.tutorialspoint;import java.io.IOException; import java.util.List;import javax.servlet.http.HttpServletResponse; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.OPTIONS; import javax.ws.rs.POST; import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType;@Path("/UserService") public class UserService {UserDao userDao = new UserDao();private static final String SUCCESS_RESULT="<result>success</result>";private static final String FAILURE_RESULT="<result>failure</result>";@GET@Path("/users")@Produces(MediaType.APPLICATION_XML)public List<User> getUsers(){return userDao.getAllUsers();}@GET@Path("/users/{userid}")@Produces(MediaType.APPLICATION_XML)public User getUser(@PathParam("userid") int userid){return userDao.getUser(userid);}@PUT@Path("/users")@Produces(MediaType.APPLICATION_XML)@Consumes(MediaType.APPLICATION_FORM_URLENCODED)public String createUser(@FormParam("id") int id,@FormParam("name") String name,@FormParam("profession") String profession,@Context HttpServletResponse servletResponse) throws IOException{User user = new User(id, name, profession);int result = userDao.addUser(user);if(result == 1){return SUCCESS_RESULT;}return FAILURE_RESULT;}@POST@Path("/users")@Produces(MediaType.APPLICATION_XML)@Consumes(MediaType.APPLICATION_FORM_URLENCODED)public String updateUser(@FormParam("id") int id,@FormParam("name") String name,@FormParam("profession") String profession,@Context HttpServletResponse servletResponse) throws IOException{User user = new User(id, name, profession);int result = userDao.updateUser(user);if(result == 1){return SUCCESS_RESULT;}return FAILURE_RESULT;}@DELETE@Path("/users/{userid}")@Produces(MediaType.APPLICATION_XML)public String deleteUser(@PathParam("userid") int userid){int result = userDao.deleteUser(userid);if(result == 1){return SUCCESS_RESULT;}return FAILURE_RESULT;}@OPTIONS@Path("/users")@Produces(MediaType.APPLICATION_XML)public String getSupportedOperations(){return "<operations>GET, PUT, POST, DELETE</operations>";} }

現(xiàn)在,使用 Eclipse 將你的應用程序導出為 war 文件然后部署到 Tomcat 中。要使用 eclipse 創(chuàng)建 WAR 文件,遵循選項?File -> export -> Web -> War File,最后選擇項目 UserManagement 和目標文件夾即可。要在 Tomcat 中部署 war 文件,把 UserManagement.war 放到?Tomcat 安裝目錄?下的 webapps 目錄中并啟動 Tomcat 即可。

測試 Web 服務

Jersey 提供了創(chuàng)建 Web 服務客戶端的 API 以測試 Web 服務。我們在同一項目的 com.tutorialspoint 包下面創(chuàng)建了一個范例測試類?WebServiceTester.java

WebServiceTester.java

package com.tutorialspoint;import java.util.List;import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Entity; import javax.ws.rs.core.Form; import javax.ws.rs.core.GenericType; import javax.ws.rs.core.MediaType;public class WebServiceTester {private Client client;private String REST_SERVICE_URL = "http://localhost:8080/UserManagement/rest/UserService/users";private static final String SUCCESS_RESULT="<result>success</result>";private static final String PASS = "pass";private static final String FAIL = "fail";private void init(){this.client = ClientBuilder.newClient();}public static void main(String[] args){WebServiceTester tester = new WebServiceTester();//initialize the testertester.init();//test get all users Web Service Methodtester.testGetAllUsers();//test get user Web Service Method tester.testGetUser();//test update user Web Service Methodtester.testUpdateUser();//test add user Web Service Methodtester.testAddUser();//test delete user Web Service Methodtester.testDeleteUser();}//Test: Get list of all users//Test: Check if list is not emptyprivate void testGetAllUsers(){GenericType<List<User>> list = new GenericType<List<User>>() {};List<User> users = client.target(REST_SERVICE_URL).request(MediaType.APPLICATION_XML).get(list);String result = PASS;if(users.isEmpty()){result = FAIL;}System.out.println("Test case name: testGetAllUsers, Result: " + result );}//Test: Get User of id 1//Test: Check if user is same as sample userprivate void testGetUser(){User sampleUser = new User();sampleUser.setId(1);User user = client.target(REST_SERVICE_URL).path("/{userid}").resolveTemplate("userid", 1).request(MediaType.APPLICATION_XML).get(User.class);String result = FAIL;if(sampleUser != null && sampleUser.getId() == user.getId()){result = PASS;}System.out.println("Test case name: testGetUser, Result: " + result );}//Test: Update User of id 1//Test: Check if result is success XML.private void testUpdateUser(){Form form = new Form();form.param("id", "1");form.param("name", "suresh");form.param("profession", "clerk");String callResult = client.target(REST_SERVICE_URL).request(MediaType.APPLICATION_XML).post(Entity.entity(form,MediaType.APPLICATION_FORM_URLENCODED_TYPE),String.class);String result = PASS;if(!SUCCESS_RESULT.equals(callResult)){result = FAIL;}System.out.println("Test case name: testUpdateUser, Result: " + result );}//Test: Add User of id 2//Test: Check if result is success XML.private void testAddUser(){Form form = new Form();form.param("id", "2");form.param("name", "naresh");form.param("profession", "clerk");String callResult = client.target(REST_SERVICE_URL).request(MediaType.APPLICATION_XML).put(Entity.entity(form,MediaType.APPLICATION_FORM_URLENCODED_TYPE),String.class);String result = PASS;if(!SUCCESS_RESULT.equals(callResult)){result = FAIL;}System.out.println("Test case name: testAddUser, Result: " + result );}//Test: Delete User of id 2//Test: Check if result is success XML.private void testDeleteUser(){String callResult = client.target(REST_SERVICE_URL).path("/{userid}").resolveTemplate("userid", 2).request(MediaType.APPLICATION_XML).delete(String.class);String result = PASS;if(!SUCCESS_RESULT.equals(callResult)){result = FAIL;}System.out.println("Test case name: testDeleteUser, Result: " + result );} }

現(xiàn)在,使用 Eclipse 運行這個測試。右擊文件,遵循選項?Run as -> Java Application。在 Eclipse 控制臺中我們會看到如下所示結果:

Test case name: testGetAllUsers, Result: pass Test case name: testGetUser, Result: pass Test case name: testUpdateUser, Result: pass Test case name: testAddUser, Result: pass Test case name: testDeleteUser, Result: pass

總結

以上是生活随笔為你收集整理的RESTful Web 服务 - 方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。