golang快速入门--web--基于http快速构建restful

这篇博客介绍了如何使用Go语言的go-restful库来构建RESTful Web服务,并结合go-restful-openapi实现Swagger 2.0规范的接口文档。示例代码展示了如何定义接口路由、处理请求响应,以及设置Swagger UI供接口文档查阅。同时,还涵盖了跨域资源共享(CORS)的配置和HTTP服务的启动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

构建web接口

文档参考

swagger ui
go-restful

依赖安装

go get -u github.com/emicklei/go-restful
go get -u github.com/go-openapi/spec
go get -u github.com/emicklei/go-restful-openapi

样例代码

package main

import (
	"fmt"
	"github.com/emicklei/go-restful"
	restfulspec "github.com/emicklei/go-restful-openapi"
	"log"
	"net/http"
)

func test(request *restful.Request, response *restful.Response) {
	// 测试接口逻辑
	_id := request.PathParameter("id") // 获取请求参数
	response.WriteEntity([]string{_id})
}

func WebService() *restful.WebService {
	// 为接口添加路由
	// 以下安装swagger 2.0标准配置
	ws := new(restful.WebService)
	ws.Path("/api").
		Consumes(restful.MIME_JSON, restful.MIME_JSON).
		Produces(restful.MIME_JSON, restful.MIME_JSON)
	ws.Route(
		ws.GET("/test/{id}").
			To(test).
			Doc("测试").
			Param(ws.PathParameter("id", "id测试").DataType("integer").DefaultValue("1")).
			Returns(200, "成功", "").
			DefaultReturns("成功", []string{"1"}),
	)
	return ws
}

func main() {
	restful.DefaultContainer.Add(WebService())
	config := restfulspec.Config{
		WebServices: restful.RegisteredWebServices(),
		APIPath:     "/apidocs.json",
	}
	restful.DefaultContainer.Add(restfulspec.NewOpenAPIService(config))
	http.Handle("/apidocs/", http.StripPrefix("/apidocs/", http.FileServer(http.Dir("./swagger-ui/dist/"))))
	cors := restful.CrossOriginResourceSharing{
		AllowedHeaders: []string{"Content-Type", "Accept"},
		AllowedMethods: []string{"GET", "POST", "PUT", "DELETE"},
		CookiesAllowed: false,
		Container:      restful.DefaultContainer}
	restful.DefaultContainer.Filter(cors.Filter)
	addr := "127.0.0.1:8089"
	fmt.Printf("http://%s/apidocs/?url=http://%s/apidocs.json\n", addr, addr)
	log.Fatal(http.ListenAndServe(addr, nil))
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值