Iris请求方式和数据返回类型

1. Iris起服务

package main

import "github.com/kataras/iris"

func main() {
	//1.创建app结构体对象
	app := iris.New() //返回一个application
	//2.端口监听(启动服务本质就是监听端口)
	//iris.WithoutServerError 设置错误
	app.Run(iris.Addr(":7999"), iris.WithoutServerError(iris.ErrServerClosed))
	//也可以不设置错误
	//application.Run(iris.Addr(":8080"))
	//application.Run(iris.Addr(":8080"), iris.WithoutServerError(iris.ErrServerClosed)) //第二种

}

2. 数据请求方式的分类

所有的项目中使用的请求都遵循HTTP协议标准,HTTP协议经过了1.0和1.1两个版本的发展。

  • HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
  • HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

因此,我们可以说,HTTP协议一共定义了八种方法用来对Request-URI网络资源的不同操作方式,这些操作具体为:GET、POST、PUT、DELETE、HEAD、OPTIONS、TRACE、CONNECT等八种操作方式。

请求方式:

package main

import (
	"github.com/kataras/iris"
	"github.com/kataras/iris/context"
)

func main() {

	app := iris.New()
	//第一个参数是路径
	//第二个是匿名函数,处理请求
	app.Get("/getRequest", func(context context.Context) {
		//处理get请求,请求的url为:/getRequest
		path := context.Path()
		//以日志的方式打印
		app.Logger().Info(path) //2020/02/05 07:17 /getRequest
	})

	//1.处理Get请求
	app.Get("/userpath", func(context context.Context) {
		//获取Path
		path := context.Path()
		app.Logger().Info(path) //2020/02/05 07:18 /userpath
		//写入返回数据:string类型
		context.WriteString("请求路径:" + path)
	})

	//2.处理Get请求 并接受参数
	//http://localhost:8000/userinfo?username=yang&pwd=123456
	app.Get("/userinfo", func(context context.Context) {
		path := context.Path()
		app.Logger().Info(path)
		//获取get请求所携带的参数
		userName := context.URLParam("username")
		app.Logger().Info(userName)

		pwd := context.URLParam("pwd")
		app.Logger().Info(pwd)
		//返回html数据格式
		context.HTML("<h1>" + userName + "," + pwd + "</h1>")
	})

	//3.处理Post请求 form表单的字段获取
	app.Post("/postLogin", func(context context.Context) {
		path := context.Path()
		app.Logger().Info(path)
		//context.PostValue方法来获取post请求所提交的form表单数据
		name := context.PostValue("name")
		pwd := context.PostValue("pwd")
		app.Logger().Info(name, "  ", pwd)
		context.HTML(name)
	})

	//4.处理Post请求 Json格式数据

	//Postman工具选择[{"key":"Content-Type","value":"application/json","description":""}]
	//请求内容:{"name": "davie","age": 28}

	app.Post("/postJson", func(context context.Context) {

		//1.path
		path := context.Path()
		app.Logger().Info("请求URL:", path)

		//2.Json数据解析
		var person Person
		//通过context.ReadJSON()读取传过来的数据
		if err := context.ReadJSON(&person); err != nil {
			panic(err.Error())
		}
		//返回格式化的内容
		context.Writef("Received: %#+v\n", person)
	})

	//5.处理Post请求 Xml格式数据
	/*
	 * 请求配置:Content-Type到application/xml(可选但最好设置)
	 * 请求内容:
	 *
	 *  <student>
	 *		<stu_name>davie</stu_name>
	 *		<stu_age>28</stu_age>
	 *	</student>
	 *
	 */
	app.Post("/postXml", func(context context.Context) {

		//1.Path
		path := context.Path()
		app.Logger().Info("请求URL:", path)

		//2.XML数据解析
		var student Student
		if err := context.ReadXML(&student); err != nil {
			panic(err.Error())
		}
		//返回格式化的内容
		context.Writef("Received:%#+v\n", student)
	})

	//6.put请求
	app.Put("/putinfo", func(context context.Context) {
		path := context.Path()
		app.Logger().Info("请求url:", path)
	})

	//7.delete请求
	app.Delete("/deleteuser", func(context context.Context) {
		path := context.Path()
		app.Logger().Info("Delete请求url:", path)
	})

	app.Run(iris.Addr(":8000"), iris.WithoutServerError(iris.ErrServerClosed))
}

//自定义的struct
type Person struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

//自定义的结构体
type Student struct {
	//XMLName xml.Name `xml:"student"`
	StuName string `xml:"stu_name"`
	StuAge  int    `xml:"stu_age"`
}

type config struct {
	Addr       string `yaml:"addr"`
	ServerName string `yaml:"serverName"`
}

数据返回类型:

package main

import (
	"github.com/kataras/iris"
	"github.com/kataras/iris/context"
)

type Teacher struct {
	Name  string `json:"Name"`
	City  string `json:"City"`
	Other string `json:"Other"`
}

//程序主入口
func main() {

	app := iris.New()

	/**
	 * 通过Get请求
	 * 返回 WriteString
	 */
	app.Get("/getHello", func(context context.Context) {
		context.WriteString(" Hello world ")
	})

	/**
	 * 通过Get请求
	 * 返回 HTML数据
	 */
	app.Get("/getHtml", func(context context.Context) {
		context.HTML("<h1> Davie, 12 </h1>")
	})

	/**
	 * 通过Get请求
	 * 返回 Json数据
	 */
	app.Get("/getJson", func(context context.Context) {
		context.JSON(iris.Map{"message": "hello word", "requestCode": 200})
	})

	//POST
	app.Post("/user/postinfo", func(context context.Context) {
		//context.WriteString(" Post Request ")
		//user := context.Params().GetString("user")

		var tec Teacher
		err := context.ReadJSON(&tec)
		if err != nil {
			panic(err.Error())
		} else {
			app.Logger().Info(tec)
			context.WriteString(tec.Name)
		}

		//fmt.Println(user)
		//teacher := Teacher{}
		//err := context.ReadForm(&teacher)
		//if err != nil {
		//	panic(err.Error())
		//} else {
		//	context.WriteString(teacher.Name)
		//}
	})

	//PUT
	app.Put("/getHello", func(context context.Context) {
		context.WriteString(" Put Request ")
	})

	app.Delete("/DeleteHello", func(context context.Context) {
		context.WriteString(" Delete Request ")
	})

	//返回json数据
	app.Get("/getJson", func(context context.Context) {
		context.JSON(iris.Map{"message": "hello word", "requestCode": 200})
	})

	app.Get("/getStuJson", func(context context.Context) {
		context.JSON(Student{Name: "Davie", Age: 18})
	})

	//返回xml数据
	app.Get("/getXml", func(context context.Context) {
		context.XML(Person{Name: "Davie", Age: 18})
	})

	//返回Text
	app.Get("/helloText", func(context context.Context) {
		context.Text(" text hello world ")
	})

	app.Run(iris.Addr(":8000"), iris.WithoutServerError(iris.ErrServerClosed))

}

//json结构体
type Student struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

//xml结构体
type Person struct {
	Name string `xml:"name"`
	Age  int    `xml:"age"`
}

原文地址:https://www.cnblogs.com/yzg-14/p/12262413.html

时间: 2024-10-07 04:58:45

Iris请求方式和数据返回类型的相关文章

Nginx下HTML页面POST请求静态JSON数据返回405状态

在浏览器访问HTML页面,发现一些静态JSON数据没有显示,F12查看,如下图所示: 可以看到请求方式为POST 将请求链接复制在浏览器地址栏访问,可以正常请求到数据 F12查看,可以看到请求方式为GET,状态码为200 可知问题为:Nginx下HTML页面POST请求静态JSON数据返回405状态,但用GET请求则正常返回数据. 百度后,有说,Apache.IIS.Nginx等绝大多数Web服务器,都不允许静态文件响应POST请求. 下面进行测试: 系统为CentOS7.5,Nginx(版本:

C# WebApi 请求方式Post,返回Response

1.[FromBody]属性只能用在一个参数上,当Body中有多个参数要定义类型.一个参数的时候 key="",value="123",key为空才能取到值. 2.返回String类型时内容前后会有双引号.要用HttpResponseMessage类型. 1 [HttpPost] 2 public HttpResponseMessage UpMessage([FromBody]UploadSmsDto body) 3 { 4 5 string message = &

Flask04 后台获取请求数据、视图函数返回类型、前台接受响应数据

1 后台获取请求数据 1.1 提出问题 前台发送请求的方式有哪些 后台如何获取这些请求的参数 1.2 前台发送请求的方式 GET.POST.AJAX 点睛:如果不指定请求方式,浏览器默认使用GET请求 点睛:进入登录页面的请求和提交登录信息的请求使用的路径都是一样的,只不过前往登录页面的请求是GET请求,服务器返回的是一个静态的页面:当录入登录信息点击确定后就会向后台发送一个POST请求,后台经过逻辑处理后,如果登录信息正确就会返回一个静态主页面(注意:虽然这两个请求都是使用的一样的路径,但是我

Get和Post方式请求一个地址,返回请求数据

package cn.gis; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; /** * 路径分析 * @author 刘仁奎 */ public class GISData { /** * Get请求方式 * * @param urlAdd

jquery ajax请求方式与提示用户正在处理请稍等,等待数据返回时loading的显示

1.jquery ajax请求方式与提示用户正在处理请稍等 为了提高用户体验度,我们通常会给出 “正在处理,请稍等!”诸如此类的提示.我们可通过设置$.ajax()下的参数beforeSend()来实现 初次使用$.ajax() ,我没有去区分过ajax的异步请求和同步请求的不同,刚开始使用同步请求,以至后来出现许多问题,特别在体验度方面.异步和同步:同步意味着执行完一段程序才能执行下一段,它属于阻塞模式,其表现在网页上的现象是——浏览器会锁定页面(即所谓的页面假死状态),用户不能操作其它的,必

TCP Incast 问题TCP INCAST解决思路 应用场景:在集群文件系统内,客户端应用请求某个逻辑数据块(通常情况下一个读数据块大小是1MB),该数据块以条带化方式分别存储在几个存储服务器上,即采用更小的数据片存储(32KB,256KB等),这种小数据片称为服务器请求单元(SRU)。只有当客户端接收到所有的服务器返回的其所请求数据块的SRU后才继续发送出下一个数据块请求,即客户端同时向

TCP INCAST解决思路 应用场景:在集群文件系统内,客户端应用请求某个逻辑数据块(通常情况下一个读数据块大小是1MB),该数据块以条带化方式分别存储在几个存储服务器上,即采用更小的数据片存储(32KB,256KB等),这种小数据片称为服务器请求单元(SRU).只有当客户端接收到所有的服务器返回的其所请求数据块的SRU后才继续发送出下一个数据块请求,即客户端同时向多个存储服务器发起并发TCP请求,且所有服务器同时向客户端发送SRU. 出现的问题: 1)         这种多对一的服务器向客

网络请求数据 get请求方式 &nbsp; post请求 协议异步连接服务器 block异步连接服务器

网络请求三部 创建一个请求(添加接口,对接口进行解码,) 设定请求方式(将接口转为NSURL,设置请求[请求地址, 缓存策略, 超时时间],设置请求方式) 连接服务器([同步连接,异步连接]代理连接,block连接) #import "MainViewController.h" @interface MainViewController () @property (retain, nonatomic) IBOutlet UIImageView *ImageWiew; //get请求方法

HTTP 请求方式: GET和POST的比较当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。

什么是HTTP? 超文本传输协议(HyperText Transfer Protocol -- HTTP)是一个设计来使客户端和服务器顺利进行通讯的协议. HTTP在客户端和服务器之间以request-response protocol(请求-回复协议)工作. GET - 从指定的服务器中获取数据 POST - 提交数据给指定的服务器处理 GET方法: 使用GET方法时,查询字符串(键值对)被附加在URL地址后面一起发送到服务器: /test/demo_form.jsp?name1=value1

fetch的使用--当无法判断后台返回数据为什么类型时如何操作

需求:一个增删改查页面,当新增,删除或者修改操作时不确定后台会返回的信息(会根据需求不同请求成功后可能返回message,可能什么都不返回) 问题:使用fetch进行请求时, Fetch API 的 Response 接口呈现了对一次请求的响应数据,response解析数据的方法我用到的为response.json()和response.text(),因为response可以获取到状态码,请求状态,但是在解析之前是不清楚返回到结果用哪种方式解析的,如果后台返回的为空还用json的方式就会报错