当前位置:首页 > 奇闻趣事

webservice框架 K8S APIServer依赖的go-restful WebService框架的简单使用

在K8S APIServer的代码中,我们依赖一个名为go-restful的库来构建HTTP API。在学习K8S代码的过程中,要对这个库有所了解,才能更方便的了解如何构建APIServer的Restful服务。

Github上这个项目的地址是:

https://github.com/emicklei/go-restful .

我们还轻松找到了作者介绍使用方法的博客。

该职位的地址是:

http://ernestmicklei . com/2012/11/go-restful-first-work-example/

在这里,我们将简要翻译它,以帮助您学习。以下是翻译。

在前一篇文章中,我介绍了go-restful包的设计,它是由谷歌的go语言开发的,用于构建REST风格的网络服务。今天,我完成了这个包的实现,包括以下功能:

使用 Route 来创建 WebService,Route 是 HTTP Request 到 Go 函数的映射。每个 Route 都需要的信息包括 HTTP 请求方法(GET,POST,...),URL 路径(/users),MimeType以及其绑定的处理函数。处理函数的输入包括一个 Request 和一个 Response。Request 对象用来获取 Path 和 Query参数,Headers以及 Request Body(XML,JSON,...)。Response 对象用来设置 Status,Headers,以及 Response BodyRequest 和 Response 对象都可以使用标准库来在对象和XML或JSON之间进行转换。

我们可以用一个简单的例子来演示上述过程。对用户对象进行CRUD操作的网络服务。我们首先在userservice目录中创建一个userservice.go文件。

packageuserserviceimport(" github . com/em icklei/go-restful " " log ")类型用户结构{ Id,名称字符串}

用户类型代表我们要操作的对象。

文件的下一部分是网络服务的应用编程接口定义。这些应用编程接口是路由对象的集合,它们定义了如何将传入的HTTP请求映射到相应的处理函数。

funcNew() *restful。web service { service:= new(restful。WebService)服务。路径(“/user”)。消费(休息。MIME_XML,restful。MIME_JSON)。生产(restful。MIME_XML,restful。MIME_JSON)服务。路线(服务。GET("/{user-id} ")。To(FindUser))服务。路线(服务。开机自检(" ")。至(UpdateUser))服务。路线(服务。PUT("/ {user-id} ")。到(CreateUser))服务。路线(服务。DELETE("/{user-id} ")。To(RemoveUser))返回服务}

首先,使用一个根网址来初始化所有路径的服务,并定义每个路由可以接收和响应的MIME类型。当然,这也可以为每条路线单独指定。然后,服务指定它可以提供哪些路径。函数调用GET(“/{ user-id }”)这里是编写方法(“GET”)的一种简单方法。路径(“/{user-id}”),它创建一个RouteBuilder对象。然后使用这个RouteBuilder对象指定相应的处理函数。

接下来是定义每条路由的处理功能。

funcFindUser(request*restful。请求,回应*宁静。响应){ id :=请求。PathParameter("user-id") //在这里,您将从某个持久性系统usr中获取用户:= & amp用户{Id: id,Name: "John Doe"}响应。WriteEntity(usr)}

Route的处理程序的方法声明都是相同的,包括Restful请求和响应,它们是成对的。请求是对http请求对象的封装,它提供了一些方便的方法。响应是对http响应编写器的封装。这种设计方法可以向开发人员开放底层的HTTP结构,也可以为开发人员提供一些通用的Restful函数,比如WriteEntity。WriteEntity函数检查请求的接受头,以确定响应的内容类型头,并确定使用哪种方法序列化对象(在本例中是用户对象)。

userservice.go文件的其余部分是剩余路由处理程序的定义。

funcUpdateUser(request *restful。请求,回应*宁静。响应){ usr :=新(用户)错误:=请求。ReadEntity(& amp;usr) //在这里,您将使用一些持久性system ferr = = nil { response }更新用户。WriteEntity(usr) } else{ response。WriteError(http。StatusInternalServerError,err)} } FunccreateUser(request * restful。请求,回应*宁静。响应){ usr :=用户{Id: request。path ParAmeter(" user-id ")} err:= request。ReadEntity(& amp;usr) //在这里,您将创建一个具有一些持久性的用户systemiferr = = nil { response。WriteEntity(usr) } else{ response。WriteError(http。StatusInternalServerError,err)} } Funcremove user(request * restful。请求,回应*宁静。回应){ //在这里您可以从某个持久性系统中删除该用户}

现在,我们已经完成了用户服务的定义和实现。下面的代码段演示了如何在应用程序中使用该服务。

package main import(" github . com/em icklei/go-restful " " log " " net/http " " user service ")func main(){ restful。Add(userservice。New())日志。致命(http。ListenAndServe(":8080 ",nil))}

服务启动后,我们可以使用以下方法进行测试:

默认的请求

$ curl http://localhost:8080/users/12 & lt;?xml version="1.0 "编码="UTF-8 "?>。& lt用户>。& ltId>。12<。/Id & gt;& lt名称>。无名氏& lt/Name >& lt/User & gt;

带 Accpet 头部的请求

$ curl http://localhost:9090/users/12-H ' Accept:application/JSON ' { Id ":" 12 "," Name": "John Doe"}

新建一个User对象

$ curl http://localhost:9090/users-X POST-d ' { " Id ":" 32 "," Name ":" jemygraw " } '-H ' Content-Type:application/JSON ' & lt;?xml version="1.0 "编码="UTF-8 "?>。& lt用户>。& ltId>。32<。/Id & gt;& lt名称>。jemygraw<。/Name >& lt/User & gt;

新的一个User对象,要求返回JSON。

$ curl http://localhost:9090/users-X POST-d ' { " Id ":" 32 "," Name ":" jemigraw " } '-H ' Content-Type:application/JSON '-H ' Accept:application/JSON ' { " Id ":" 32 "," Name ":" jemigraw " }

翻译:

本文的永久存储地址为:

https://github . com/jemygraw/TechDoc/blob/master/Go % E5 % BA % 93% E5 % AD % A6 % E4 % B9 % A0/2018-09-14% 20k 8s % 20% E4 % BE % 9D % E8 % B5 % 96% E5 % BA % 93% E4 % B8 % AD % E7 % 9A % 84 Go-restful % E6 % A1 % 86% E6 % 9E % B6 MD

1.《webservice框架 K8S APIServer依赖的go-restful WebService框架的简单使用》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《webservice框架 K8S APIServer依赖的go-restful WebService框架的简单使用》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/guonei/1022965.html

上一篇

90后女孩开医护专车 主动加入武汉医护专车志愿者车队

下一篇

非湖北新增连降两日 确诊病例为707例

北京市工资支付规定 员工离职,工资必须当天付清?各省市的具体规定在这里!

北京市工资支付规定 员工离职,工资必须当天付清?各省市的具体规定在这里!

本文来源于微信微信官方账号:被支付人工资和企业小工资(ID:xrxs _ qihaxin) HR干货,职场天才老司机。授权转载。 今天的HR话题:员工离职应该多少天发工资?如何支付? 小李一直在杭州工作。他今年3月26日离开当地一家公司,然后要求公司结清工资。但是公司告诉他,员工的工资每个月...

差集 用AI差集怎么进行对象挖空

  • 差集 用AI差集怎么进行对象挖空
  • 差集 用AI差集怎么进行对象挖空
  • 差集 用AI差集怎么进行对象挖空

微博超话app 在增长用户的道路上持续发力,微博上线 “超话社区App”

  • 微博超话app 在增长用户的道路上持续发力,微博上线 “超话社区App”
  • 微博超话app 在增长用户的道路上持续发力,微博上线 “超话社区App”
  • 微博超话app 在增长用户的道路上持续发力,微博上线 “超话社区App”
男子诈骗被识破后问能否搞对象 到底什么情况呢?

男子诈骗被识破后问能否搞对象 到底什么情况呢?

日常生活中经常发生一些欺诈行为。最近,一名男子打电话给女大学生潘潇,指控她诈骗,他被自己的灵魂说服了。据了解,潘潇曾经接到过诈骗电话,所以他也在网上查了骗子的手段。所以,当他接到电话时,他发现了骗子的身份。然而,他没想到骗...

抖音好听的名字 2018抖音上那些好听却不知道名字歌, 全都在这里了, 拿走不谢!

抖音好听的名字 2018抖音上那些好听却不知道名字歌, 全都在这里了, 拿走不谢!

我已经爱上你了——二郎 我爱上了你,渴望在一起;然而,我们之间有很大的距离。 陷阱——王北车 我从未爱过你,我欺骗了自己;我给你写了一封信,我把它扔进了海里。 突然想起你——萧亚轩 一个人的夜晚,我的心该放在哪里,拥抱后我的手该放在哪里 纸短爱情-香烟条 怎么才能爱上他,决定和他回家;放弃自...

bough 新史学荐书069 |《时间与他者:人类学如何制作其对象》

bough 新史学荐书069 |《时间与他者:人类学如何制作其对象》

东方式 同时,法比安将他对时代错误的研究与修辞图式的有力分析联系起来,将这种开创性的话语建构批评与人类学对象和批判人类学的解放理想相比较,并强调后结构主义对他者表达的研究。对于法比安来说,米歇尔·福柯的介入起到了重要而鼓舞人心的作用。这是对“东方主义”和爱德华·萨义德的一个明显的平行分析。他...

练习做某事英语 初中英语所有动词固定搭配都在这里, 太全了!收藏起来用三年!

练习做某事英语 初中英语所有动词固定搭配都在这里, 太全了!收藏起来用三年!

动词的固定搭配无疑是初中英语的重点、难点和必考点。今天想和大家分享一下初中三年所有动词的固定搭配,希望能帮到你。 1.25个常用动词,以不定式(非动名词)为宾语 1.想做某事。想做某事 今天下午我想买一台新电脑。 今天下午我想买一台新电脑。 2.想做某事。想做某事 我想邀请你参加我这个星期六...

12321 未经用户同意营销来电即为骚扰!可向12321举报中心举报丨关注

12321 未经用户同意营销来电即为骚扰!可向12321举报中心举报丨关注

“你好,我有很多‘竹笋’要卖,你有兴趣吗?”“需要贷款吗?低息快贷!”你经常遇到这些骚扰电话吗?你是怎么处理的? 遇到骚扰电话,用户可以通过电话标记软件标记相关号码,或者向基础电信企业和12321举报中心举报。  目前,工业和信息化部与十三个部委共同制定了《骚扰电话综合整治专项行动计划》。接...