Api編寫
1> Gin架構的Api傳回的資料格式有json,xml,yaml這三種格式。其中yaml這種格式是一種特殊的資料格式。(本人暫時沒有實作擷取節點值得操作)
2> 在apis檔案夾下,建立一個data.go檔案,作為擷取api資料的業務邏輯代碼.具體代碼如下:
package apis
import (
"net/http"
"github.com/gin-gonic/gin"
. "GinLearn/GinLearn/models"
)
//Api調用的頁面
func GetApiHtml(c *gin.Context){
c.HTML(http.StatusOK,"api.html",gin.H{
"title":"Go-Gin Api調用頁面",
})
}
//Json格式的資料
func GetJsonData(c *gin.Context) {
//得到請求的參數
search:=c.PostForm("search")
//得到使用者的資料
datalist:=GetPersonList(1,10,search)
//得到記錄的總數
count:=GetRecordNum(search)
//傳回結果
c.JSON(http.StatusOK, gin.H{
"datalist": datalist,
"count":count,
"pagesize":3,
"pageno":1,
})
}
//Xml格式的資料
func GetXmlData(c *gin.Context) {
//得到請求的參數
search:=c.PostForm("search")
//得到使用者的資料
datalist:=GetPersonList(1,10,search)
//得到記錄的總數
count:=GetRecordNum(search)
//傳回結果
c.XML(http.StatusOK, gin.H{
"datalist": datalist,
"count":count,
"pagesize":3,
"pageno":1,
})
}
//Xml格式的資料
func GetYamlData(c *gin.Context) {
//得到請求的參數
search:=c.PostForm("search")
//得到使用者的資料
datalist:=GetPersonList(1,10,search)
//得到記錄的總數
count:=GetRecordNum(search)
//傳回結果
c.YAML(http.StatusOK, gin.H{
"datalist": datalist,
"count":count,
"pagesize":3,
"pageno":1,
})
}
//Json格式的資料
func GetParamsJsonData(c *gin.Context) {
//得到請求的參數
search:=c.PostForm("search")
//得到使用者的資料
datalist:=GetPersonList(1,10,search)
//得到記錄的總數
count:=GetRecordNum(search)
//傳回結果
c.JSON(http.StatusOK, gin.H{
"datalist": datalist,
"count":count,
"pagesize":3,
"pageno":1,
"search":search,
})
}
3> 在views檔案夾下建立一個api.html頁面作為測試擷取api資料的展示頁面.具體代碼如下:
<!DOCTYPE html>
<html>
<head>
<title>{{.title}}</title>
<link rel="shortcut icon" href="/static/img/favicon.png" />
<link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css"/>
<script type="text/javascript" src="/static/js/jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="/static/bootstrap/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<!--請求得到字典資料-->
<div style="width:100%;height:50px;">
<input type="text" id="search" placeholder="請輸入參數"/>
<button onclick="getparams()" class="btn btn-primary">得到參數</button>
<label id="txtparams"></label>
</div>
<!--請求得到Json資料-->
<div style="width:100%;height:50px;">
<button onclick="getjson()" class="btn btn-primary">得到Json</button>
<label id="txtjson"></label>
</div>
<!--請求得到Xml資料-->
<div style="width:100%;height:50px;">
<button onclick="getxml()" class="btn btn-primary">得到Xml</button>
<label id="txtxml"></label>
</div>
<!--請求得到Yaml資料-->
<div style="width:100%;height:50px;">
<button onclick="getYaml()" class="btn btn-primary">得到Yaml</button>
<label id="txtyaml"></label>
</div>
</div>
<!--JS部分-->
<script type="text/javascript">
//得到參數
function getparams(){
$.ajax({
type:'get',
url:'/api/paramsdata',//此處的是json資料的格式
data:{
search:$("#search").val()
},
success:function(result){
console.log('擷取參數的資料')
console.log(result)
$("#txtparams").html("記錄總數:"+result.count
+",記錄I:"+result.datalist[0].first_name+result.datalist[0].last_name+",記錄II:"
+result.datalist[1].first_name+result.datalist[1].last_name+"...");
}
})
}
//得到Json
function getjson(){
$.ajax({
type:'get',
url:'/api/jsondata',
dataType:'json',//此處的是json資料的格式
data:{
search:$("#search").val()
},
success:function(result){
console.log('擷取json的資料')
console.log(result)
$("#txtjson").html("json的結果:"+result.count
+",記錄1:"+result.datalist[0].first_name+result.datalist[0].last_name+",記錄2:"
+result.datalist[1].first_name+result.datalist[1].last_name+"...");
}
})
}
//得到Xml
function getxml(){
$.ajax({
type:'get',
url:'/api/xmldata',
dataType:'xml',//此處的是xml資料的格式
data:{
search:$("#search").val()
},
success:function(result){
console.log('擷取xml的資料')
console.log(result)
$("#txtxml").html("xml的結果:"+$(result).text());
}
})
}
//得到yaml
function getYaml(){
$.ajax({
type:'get',
url:'/api/yamldata',
data:{
search:$("#search").val()
},
success:function(result){
console.log('擷取yaml的資料')
console.log(result)
$("#txtyaml").html("yaml的結果:"+result);
}
})
}
</script>
</body>
</html>
4> 在路由器檔案router.go中添加api部分的路由。具體代碼如下:
package routers
import (
"github.com/gin-gonic/gin"
. "GinLearn/GinLearn/apis" //api部分
. "GinLearn/GinLearn/controllers" //constroller部分
)
func InitRouter() *gin.Engine{
router := gin.Default()
//Hello World
router.GET("/", IndexApi)
//渲染html頁面
router.LoadHTMLGlob("views/*")
router.GET("/home/index", ShowHtmlPage)
//清單頁面
router.GET("/home/list", ListHtml)
router.POST("/home/PageData", GetDataList)
router.POST("/home/PageNextData", PageNextData)
//新增頁面
router.GET("/home/add", AddHtml)
router.POST("/home/saveadd", AddPersonApi)
//編輯頁面
router.GET("/home/edit", EditHtml)
router.POST("/home/saveedit", EditPersonApi)
//删除
router.POST("/home/delete", DeletePersonApi)
//Bootstrap布局頁面
router.GET("/home/bootstrap", Bootstraphtml)
//檔案的上傳和下載下傳
router.GET("/home/fileopt", Fileopthtml)
router.POST("/home/fileuplaod", Fileupload)
router.GET("/home/filedown", Filedown)
//檔案的建立删除和讀寫
router.GET("/home/filerw", Filerwhtml)
router.POST("/home/addfile", FilerCreate)//建立檔案
router.POST("/home/writefile", FilerWrite)//寫入檔案
router.POST("/home/readfile", FilerRead)//讀取檔案
router.POST("/home/deletefile", FilerDelete)//删除檔案
//api調用的部分
router.GET("/home/api", GetApiHtml)
router.GET("/api/jsondata", GetJsonData)
router.GET("/api/xmldata", GetXmlData)
router.GET("/api/yamldata", GetYamlData)
router.GET("/api/paramsdata", GetParamsJsonData)
return router
}
5> 編譯測試,具體效果如下:

6> 下一章講布局頁面