一、接口的簡單介紹
1.什么是接口:接口及服務;
2.接口的分類:(1)系統的內部接口;(2)第三方的外部接口;
3.簡述接口原理圖:
4.接口協議:是指客戶端跟服務器之間或者接口與接口間進行的通訊時必須要遵從的約定和要求;
互聯網上 應用最為廣泛的一種網絡協議--http協議(超文本傳輸協議),因此最常見的就是http協議的接口.(webservice接口,dubbo接口等都是基於http協議)
5.http協議的組成
請求: 1.url統一資源定位符(接口地址) 2.請求方式(get,post,put,delete) 3.請求參數 4.請求格式 5.請求頭:攜帶服務器關於客戶端的一些信息 6.協議版本 響應: 1.響應的狀態碼 2.響應頭:攜帶客關於服務器的一些信息給客戶端 3.響應報文
6.接口的本質
(1) 接口就是服務,功能的實現,本質就是基於某協議下實現的一個函數,例如登錄界面請求xxx/login.html地址的時候,通過路徑
映射,請求到login()函數進行處理.
(2) 接口的傳參對應了函數的參數(接口測試參數--函數參數),接口的響應報文對應了函數定義的返回值(接口響應報文--函數的返回值)
二、引入微服務架構Spring Boot,我們只需要導入我們本次需求需要的依賴包即可!
<!-- 引入springboot默認提供的一套依賴 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.RELEASE</version> </parent> <dependencies> <!-- 提供了web模塊的依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.1.1.RELEASE</version> </dependency> <!-- 熱部署 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>provided</scope> <optional>true</optional> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.13</version> </dependency> </dependencies>
注入:eclipse導入熱部署依賴后需要勾選項
導入mysql依賴:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency>
三、代碼實現簡單接口功能如下:
1.get請求:http://IP:端口/user/login?username=xxx&password=123456 2.數據庫驗證,請求參數是否存在:username=xxx&password=123456,如果不存在提示檢查信息,如果存在登錄成功 2.json格式響應數據:{"status":"1","message":"登錄成功"}
1.新建Application類,SpringBoot入口程序
package cn.bing.starter; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; /**Spring boot 入口啟動程序,sprint boot內置了tomcat * @author Administrator */ @ComponentScan(basePackages= {"cn.bing.api"})//掃描組件 @SpringBootApplication//定義sprintboot入口程序 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class,args); } }
2.實現SQL數據庫查詢工具類
(1)請根據自己實現情況,配置連接數據庫參數jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/my_test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8 jdbc.username=sql-name jdbc.password=sql-password
(2)實現SQlUtil工具類
package cn.bing.util; import java.io.File; import java.io.FileInputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; import java.util.Properties; import cn.bing.pojo.User; public class SQLUtil { /** * 靜態代碼塊加載后,用map來存儲jdbc連接數據庫的信息 */ public static HashMap<String, String> map = new HashMap<String, String>(); static { //加載properties文件獲取連接SQL數據庫的參數 Properties properties = new Properties(); try { properties.load(new FileInputStream(new File("src/test/resources/jdbc.properties"))); } catch (Exception e) { e.printStackTrace(); } map.put("url", properties.getProperty("jdbc.url")); map.put("name", properties.getProperty("jdbc.username")); map.put("pwd", properties.getProperty("jdbc.password")); } /**傳入user進入數據庫查詢是否存在,返回大於1存在,返回0則不存在 * @param user */ public static int findSQL(User user) { //根據SQL查詢結果為數量num,假設沒有查到為0 int num =0; //取出需要查詢的數據username和password String username = user.getUsername(); String password = user.getPassword(); String sql ="select count(*) as number from user_test where name='"+username+"'"+"and password='"+password+"'"; Connection connection =null; try { //1.創建連接 connection = DriverManager.getConnection(map.get("url"),map.get("name"),map.get("pwd")); //2.獲得一個statement對象,將要執行的sql腳本封裝到此對象中 PreparedStatement statement =connection.prepareStatement(sql); ResultSet ResultSet = statement.executeQuery(); while(ResultSet.next()) { num =ResultSet.getInt("number"); } } catch (SQLException e) { e.printStackTrace(); }finally { try { connection.close();//關閉連接 } catch (SQLException e) { e.printStackTrace(); } } return num; } }
3.新建user對象
package cn.bing.pojo; public class User { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public User(String username, String password) { super(); this.username = username; this.password = password; } public User() { super(); } }
4.新建Result對象,響應時=>序列化為json格式返回
package cn.bing.pojo; public class Result { //接口返回狀態標志:1:代表接口正常處理,返回成功; 0:代表處理異常,返回失敗 private String status; private String message; public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public Result(String status, String message) { super(); this.status = status; this.message = message; } public Result() { super(); } @Override public String toString() { return "Result [status=" + status + ", message=" + message + "]"; } }
5.中央控制器的實現類
package cn.bing.api; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import cn.bing.pojo.Result; import cn.bing.pojo.User; import cn.bing.util.SQLUtil; /**controller:控制器(實現請求分發,一般會在控制器當中定義接口) * @author Administrator * */ @RestController//控制器類 @RequestMapping("/user")//映射路徑 public class UserController { //登錄接口 http://ip:端口/user/login @RequestMapping(value="/login") public Result login(User user) { String username = user.getUsername(); String password = user.getPassword(); //1.用戶名為空提示"用戶名不能為空" if(username==null || username.trim().length()==0) { return new Result("0","用戶名不能為空"); } //2.密碼為空,提示"密碼不能為空" if(password==null || password.trim().length()==0) { return new Result("0","密碼不能為空"); } //3.用戶名密碼不為空的情況下jdbc完成數據庫查詢驗證 if(username != null && password!=null) { int num = SQLUtil.findSQL(user); System.out.println("-------------------------"+num+"--------------------------------"); if(num>0) { return new Result("1", "登錄成功"); } } return new Result("0","請核對賬密信息!"); } }
四.運行Application類,啟動SpringBoot程序,訪問接口結果如下:
補充:數據庫保存用戶名及密碼截圖
五、擴展:
1.如果@RequestMapping(value="/login",method=RequestMethod.GET,僅支持get訪問
@RestController//控制器類 @RequestMapping("/user")//映射路徑 public class UserController { @RequestMapping(value="/login",method=RequestMethod.GET") public Result login(User user) {
... ...
}
}
2.如果@RequestMapping(value="/login",method=RequestMethod.POST),僅支持post訪問
@RestController//控制器類 @RequestMapping("/user")//映射路徑 public class UserController { @RequestMapping(value="/login",method=RequestMethod.POST") public Result login(User user) { ... ... } }
3.規定傳參格式:consumes="application/json"
4. @RequestBody需要把所有請求參數作為json解析,因此,不能包含key=value這樣的寫法在請求url中,所有的請求參數都是一個json
//@RequestBody(required=false) Whether body content is required. Default is true, leading to an exception thrown in case there is no body content. Switch this to false if you prefer null to be passed when the body content is null.
百度翻譯:默認值為true,在沒有正文內容的情況下會引發異常。如果您希望在正文內容為null時傳遞null,請將其切換為false。
@RestController//控制器類 @RequestMapping("/user")//映射路徑 public class UserController { @RequestMapping(value="/login",method=RequestMethod.POST,consumes="application/json") public Result login(@RequestBody(required=false)User user) {
... ...
}
}
六、未完待優化。。。。。