首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >tornado基础

tornado基础

作者头像
星哥玩云
发布于 2022-09-14 11:08:31
发布于 2022-09-14 11:08:31
52800
代码可运行
举报
文章被收录于专栏:开源部署开源部署
运行总次数:0
代码可运行

一、第一个tornado程序

新建文件manage.py 代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<span class="hljs-keyword">import</span> tornado.web
<span class="hljs-keyword">import</span> tornado.ioloop

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">IndexHandler</span><span class="hljs-params">(tornado.web.RequestHandler)</span>:</span>
    <span class="hljs-string">"""主路由处理类"""</span>
    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">get</span><span class="hljs-params">(self)</span>:</span>
        <span class="hljs-string">"""对应http的get请求方式"""</span>
        self.write(<span class="hljs-string">"Hello Lucky!"</span>)

<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">"__main__"</span>:
    app = tornado.web.Application([
        (<span class="hljs-string">r"/"</span>, IndexHandler),
    ])
    app.listen(<span class="hljs-number">8000</span>)
    tornado.ioloop.IOLoop.current().start()

运行

python manage.py

请求

打开浏览器,输入网址127.0.0.1:8000(或localhost:8000)

代码讲解

tornado.web

tornado的基础web框架模块

RequestHandler

封装了对应一个请求的所有信息和方法,write(响应信息)就是写响应信息的一个方法;对应每一种http请求方式(get、post等),把对应的处理逻辑写进同名的成员方法中(如对应get请求方式,就将对应的处理逻辑写在get()方法中),当没有对应请求方式的成员方法时,会返回“405: Method Not Allowed”错误。

我们将代码中定义的get()方法更改为post()后,再用浏览器重新访问(浏览器地址栏中输入网址访问的方式为get请求方式)

示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<span class="hljs-keyword">import</span> tornado.web
<span class="hljs-keyword">import</span> tornado.ioloop

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">IndexHandler</span><span class="hljs-params">(tornado.web.RequestHandler)</span>:</span>
      <span class="hljs-string">"""主路由处理类"""</span>
      <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">post</span><span class="hljs-params">(self)</span>:</span> <span class="hljs-comment"># 修改方式为POST</span>
          <span class="hljs-string">"""对应http的post请求方式"""</span>
          self.write(<span class="hljs-string">"Hello Lucky!"</span>)

<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">"__main__"</span>:
      ...

访问

  • Application Tornado Web框架的核心应用类,是与服务器对接的接口,里面保存了路由信息表,其初始化接收的第一个参数就是一个路由信息映射元组的列表;其listen(端口)方法用来创建一个http服务器实例,并绑定到给定端口 注意:此时服务器并未开启监听
  • tornado.ioloop tornado的核心io循环模块,封装了Linux的epoll和BSD的kqueue,tornado高性能的基石
  • IOLoop.current() 返回当前线程的IOLoop实例
  • IOLoop.start() 启动IOLoop实例的I/O循环,同时服务器监听被打开。
  • 步骤
    • 创建web应用实例对象,第一个初始化参数为路由映射列表
    • 定义实现路由映射列表中的handler类
    • 创建服务器实例,绑定服务器端口
    • 启动当前线程的IOLoop

二、httpserver

概述

之前我们通过创建了一个http服务器示例并绑定到给定端口(tornado.web.Application.listen(800)) 接下来进行手动实现

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<span class="hljs-keyword">import</span> tornado.web
<span class="hljs-keyword">import</span> tornado.ioloop
<span class="hljs-keyword">import</span> tornado.httpserver  <span class="hljs-comment"># 导入httpserver模块</span>

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">IndexHandler</span><span class="hljs-params">(tornado.web.RequestHandler)</span>:</span>
    <span class="hljs-string">"""主路由处理类"""</span>
    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">get</span><span class="hljs-params">(self)</span>:</span>
        <span class="hljs-string">"""对应http的get请求方式"""</span>
        self.write(<span class="hljs-string">"Hello Lucky!"</span>)

<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">"__main__"</span>:
    app = tornado.web.Application([
        (<span class="hljs-string">r"/"</span>, IndexHandler),
    ])

    <span class="hljs-comment"># 我们修改这个部分</span>
    <span class="hljs-comment"># app.listen(8000)</span>
    http_server = tornado.httpserver.HTTPServer(app) 
    http_server.listen(<span class="hljs-number">8000</span>)
    
    tornado.ioloop.IOLoop.current().start()

说明

在当前代码中,我们引入了tornado.httpserver模块,顾名思义,它就是tornado的HTTP服务器实现

我们创建了一个HTTP服务器实例http_server,因为服务器要服务于我们刚刚建立的web应用,将接收到的客户端请求通过web应用中的路由映射表引导到对应的handler中,所以在构建http_server对象的时候需要传出web应用对象app。http_server.listen(8000)将服务器绑定到8000端口

实际上一版代码中app.listen(8000)正是对这一过程的简写

三、单进程与多进程

我们刚刚实现的都是单进程,可以通过命令来查看进程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ps -ef | grep manage.py

启动多个进程 修改代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<span class="hljs-keyword">import</span> tornado.web
<span class="hljs-keyword">import</span> tornado.ioloop
<span class="hljs-keyword">import</span> tornado.httpserver 

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">IndexHandler</span><span class="hljs-params">(tornado.web.RequestHandler)</span>:</span>
    <span class="hljs-string">"""主路由处理类"""</span>
    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">get</span><span class="hljs-params">(self)</span>:</span>
        <span class="hljs-string">"""对应http的get请求方式"""</span>
        self.write(<span class="hljs-string">"Hello lucky!"</span>)

<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">"__main__"</span>:
    app = tornado.web.Application([
        (<span class="hljs-string">r"/"</span>, IndexHandler),
    ])
    http_server = tornado.httpserver.HTTPServer(app) 
    <span class="hljs-comment"># 修改</span>
    http_server.bind(<span class="hljs-number">8000</span>)
    http_server.start(<span class="hljs-number">0</span>)
 
    tornado.ioloop.IOLoop.current().start()

代码是说明

  • http_server.bind(port)方法是将服务器绑定到指定端口
  • http_server.start(num_processes=1)方法指定开启几个进程
    • 参数num_processes默认值为1,即默认仅开启一个进程
    • num_processes为None或者<=0,则自动根据机器硬件的cpu核芯数创建同等数目的子进程
    • num_processes>0,则创建num_processes个子进程

上段代码中,我们使用http_server.start(0),而我的Mac cpu核数为8

演示结果

注意

我们在前面写的http_server.listen(8000)实际上就等同于

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http_server.bind(8000)
http_server.start(1)

四、注意

关于app.listen()

app.listen()这个方法只能在单进程模式中使用

对于app.listen()与手动创建HTTPServer实例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http_server = tornado.httpserver.HTTPServer(app) 
http_server.listen(<span class="hljs-number">8000</span>)

这两种方式,建议大家先使用后者即创建HTTPServer实例的方式,因为其对于理解tornado web应用工作流程的完整性有帮助,便于大家记忆tornado开发的模块组成和程序结构;在熟练使用后,可以改为简写

关于多进程

虽然tornado给我们提供了一次开启多个进程的方法,但是由于:

  • 每个子进程都会从父进程中复制一份IOLoop实例,如过在创建子进程前我们的代码动了IOLoop实例,那么会影响到每一个子进程,势必会干扰到子进程IOLoop的工作
  • 所有进程是由一个命令一次开启的,也就无法做到在不停服务的情况下更新代码
  • 所有进程共享同一个端口,想要分别单独监控每一个进程就很困难

不建议使用这种多进程的方式,而是手动开启多个进程,并且绑定不同的端口

五、options

说明

在前面的示例中我们都是将服务端口的参数写死在程序中,很不灵活

tornado为我们提供了一个便捷的工具,tornado.options模块——全局参数定义、存储、转换

tornado.options.define()

  • 说明 用来定义options选项变量的方法,定义的变量可以在全局的tornado.options.options中获取使用
  • 参数
    • name 选项变量名,须保证全局唯一性,否则会报"Option ‘xxx’ already defined in …"的错误
    • default 选项变量的默认值,如不传默认为None
    • type 选项变量的类型,从命令行或配置文件导入参数的时候tornado会根据这个类型转换输入的值,转换不成功时会报错,可以是str、float、int、datetime、timedelta中的某个,若未设置则根据default的值自动推断,若default也未设置,那么不再进行转换。可以通过利用设置type类型字段来过滤不正确的输入
    • multiple 选项变量的值是否可以为多个,布尔类型,默认值为False,如果multiple为True,那么设置选项变量时值与值之间用英文逗号分隔,而选项变量则是一个list列表(若默认值和输入均未设置,则为空列表[])
    • help 选项变量的帮助提示信息,在命令行启动tornado时,通过加入命令行参数 --help 可以查看所有选项变量的信息(注意,代码中需要加入tornado.options.parse_command_line())

tornado.options.options

  • 说明 全局的options对象,所有定义的选项变量都会作为该对象的属性。

tornado.options.parse_command_line()

说明

转换命令行参数,并将转换后的值对应的设置到全局options对象相关属性上。追加命令行参数的方式是–myoption=myvalue

使用

新建manage2.py,我们用代码来看一下如何使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<span class="hljs-keyword">import</span> tornado.web
<span class="hljs-keyword">import</span> tornado.ioloop
<span class="hljs-keyword">import</span> tornado.httpserver
<span class="hljs-keyword">import</span> tornado.options <span class="hljs-comment"># 新导入的options模块</span>

tornado.options.define(<span class="hljs-string">"port"</span>, default=<span class="hljs-number">8000</span>, type=int, help=<span class="hljs-string">"run server on the given port."</span>) <span class="hljs-comment"># 定义服务器监听端口选项</span>
tornado.options.define(<span class="hljs-string">"lucky"</span>, default=[], type=str, multiple=<span class="hljs-keyword">True</span>, help=<span class="hljs-string">"lucky is a good man"</span>) <span class="hljs-comment"># 无意义,演示多值情况</span>

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">IndexHandler</span><span class="hljs-params">(tornado.web.RequestHandler)</span>:</span>
    <span class="hljs-string">"""主路由处理类"""</span>
    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">get</span><span class="hljs-params">(self)</span>:</span>
        <span class="hljs-string">"""对应http的get请求方式"""</span>
        self.write(<span class="hljs-string">"Hello Itcast!"</span>)

<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">"__main__"</span>:
    tornado.options.parse_command_line()
    print(tornado.options.options.lucky) <span class="hljs-comment"># 输出多值选项</span>
    print(tornado.options.options.port) <span class="hljs-comment"># 输出多值选项</span>

    app = tornado.web.Application([
        (<span class="hljs-string">r"/"</span>, IndexHandler),
    ])
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(tornado.options.options.port)
    tornado.ioloop.IOLoop.current().start()

执行如下命令开启程序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python manage2.py --port=<span class="hljs-number">9000</span> --lucky=handsome,Sunshine,Sunshine

查看帮助

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python manage2.py --help

效果如下:

tornado.options.parse_config_file(path)

从配置文件导入option,配置文件中的选项格式如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myoption = <span class="hljs-string">"myvalue"</span>
myotheroption = <span class="hljs-string">"myothervalue"</span>

我们用代码来看一下如何使用,新建配置文件config.py,注意字符串和列表按照python的语法格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
port = <span class="hljs-number">8000</span>
lucky = [<span class="hljs-string">"handsome"</span>,<span class="hljs-string">"Sunshine"</span>,<span class="hljs-string">"Sunshine"</span>]

修改manage2.py文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	...
<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">"__main__"</span>:
    <span class="hljs-comment"># 仅仅修改了此处</span>
    tornado.options.parse_config_file(<span class="hljs-string">"./config.py"</span>) 
	...

六、日志与配置

  • 日志 当我们在代码中调用parse_command_line()或者parse_config_file()的方法时,tornado会默认为我们配置标准logging模块,即默认开启了日志功能,并向标准输出(屏幕)打印日志信息

如果想关闭tornado默认的日志功能,可以在命令行中添加–logging=none 或者在代码中执行如下操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<span class="hljs-keyword">from</span> tornado.options <span class="hljs-keyword">import</span> parse_command_line
parse_command_line()

命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python manage.py --logging=none

添加在代码中关闭logging

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<span class="hljs-keyword">from</span> tornado.options <span class="hljs-keyword">import</span> options
options.logging = <span class="hljs-keyword">None</span>

配置文件

我们看到在使用prase_config_file()的时候,配置文件的书写格式仍需要按照python的语法要求,其优势是可以直接将配置文件的参数转换设置到全局对象tornado.options.options中;然而,其不方便的地方在于需要在代码中调用tornado.options.define()来定义选项,而且不支持字典类型,故而在实际应用中大都不使用这种方法。

在使用配置文件的时候,通常会新建一个python文件(如config.py),然后在里面直接定义python类型的变量(可以是字典类型);在需要配置文件参数的地方,将config.py作为模块导入,并使用其中的变量参数。

config.py文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<span class="hljs-comment"># Redis配置</span>
redis_options = {
    <span class="hljs-string">'redis_host'</span>:<span class="hljs-string">'127.0.0.1'</span>,
    <span class="hljs-string">'redis_port'</span>:<span class="hljs-number">6379</span>,
    <span class="hljs-string">'redis_pass'</span>:<span class="hljs-string">''</span>,
}

<span class="hljs-comment"># Tornado app配置</span>
settings = {
    <span class="hljs-string">'template_path'</span>: os.path.join(os.path.dirname(__file__), <span class="hljs-string">'templates'</span>),  <span class="hljs-comment"># html文件</span>
    <span class="hljs-string">'static_path'</span>: os.path.join(os.path.dirname(__file__), <span class="hljs-string">'statics'</span>), <span class="hljs-comment"># 静态文件(css,js,img)</span>
    <span class="hljs-string">'cookie_secret'</span>:<span class="hljs-string">'0Q1AKOKTQHqaa+N80XhYW7KCGskOUE2snCW06UIxXgI='</span>, <span class="hljs-comment"># cookie自定义字符串加盐</span>
    <span class="hljs-string">'xsrf_cookies'</span>:<span class="hljs-keyword">False</span>, <span class="hljs-comment"># 防止跨站伪造</span>
    <span class="hljs-string">'login_url'</span>:<span class="hljs-string">'/login'</span>,
    <span class="hljs-string">'debug'</span>:<span class="hljs-keyword">True</span>,
}



<span class="hljs-comment"># 日志</span>
log_path = os.path.join(os.path.dirname(__file__), <span class="hljs-string">'logs/log'</span>)

使用config.py的模块中导入config,如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<span class="hljs-comment"># conding:utf-8</span>

<span class="hljs-keyword">import</span> tornado.web
<span class="hljs-keyword">import</span> config

<span class="hljs-keyword">if</span> __name__ = <span class="hljs-string">"__main__"</span>:
    app = tornado.web.Application([], **config.settings)
...
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
详解 RestTemplate 操作
作为开发人员,我们经常关注于构建伟大的软件来解决业务问题。数据只是软件完成工作时  要处理的原材料。但是如果你问一下业务人员,数据和软件谁更重要的话,他们很可能会选择  数据。数据是许多业务的生命之血。软件通常是可以替换的,但是多年积累的数据是永远不能  替换的。
业余草
2019/01/21
3.1K0
详解 RestTemplate 操作
Spring RestTemplate中几种常见的请求方式
当我们从服务消费端去调用服务提供者的服务的时候,使用了一个很好用的对象,叫做RestTemplate,当时我们只使用了RestTemplate中最简单的一个功能getForEntity发起了一个get请求去调用服务端的数据,同时,我们还通过配置@LoadBalanced注解开启客户端负载均衡,RestTemplate的功能不可谓不强大,那么今天我们就来详细的看一下RestTemplate中几种常见请求方法的使用。
田维常
2019/07/16
3.5K0
Spring RestTemplate中几种常见的请求方式
RestTemplate的应用
Spring提供了一种简单便捷的模板类 RestTemplate 来调用 RESTful 接口。它提供了多种便捷访问HTTP服务的方法,能够大大提高客户端的编写效率。
砒霜拌辣椒
2023/08/23
3360
手把手讲解Spring中的Http请求神器RestTemplate
Java 中关于 Http 请求的工具实际上非常多,自带的 HttpUrlConnection,古老的 HttpClient,后起之秀 OkHttp 等,除了这些之外,还有一个好用的工具--RestTemplate,这是 Spring 中就开始提供的 Http 请求工具,不过很多小伙伴们可能是因为 Spring Cloud 才听说它。今天我们就来聊一聊这个 RestTemplate。
江南一点雨
2020/02/21
2.8K0
手把手讲解Spring中的Http请求神器RestTemplate
SpringBoot使用RestTemplate访问第三方接口
相信大家都知道如何在自己的项目里面调用自己的接口,只需要调用自己项目里面接口特定的URL地址就行了,但是如果是调用其他项目的接口呢,这时候如果是直接调用的话,很明显我们是不能够调用的.肯定是要通过某个工具才能够进行访问的.我们可以通过下面这张图来理解.
萌萌哒的瓤瓤
2021/01/13
3.9K0
SpringBoot使用RestTemplate访问第三方接口
玩转Spring Boot之RestTemplate的使用
在java代码里想要进行restful web client服务,一般使用Apache的HttpClient。不过此种方法使用起来太过繁琐。Spring Boot提供了一种简单便捷的内置模板类来进行操作,这就是RestTemplate。
闫同学
2022/10/31
7390
Spring RestTemplate介绍
  上篇文件介绍Eureka服务的文章中,我们介绍到consumer从Eureka中通过LoadBalancerClient获取到服务端地址信息后通过RestTemplate来远程调用服务的场景,本文来具体介绍下RestTemplate的使用
用户4919348
2019/05/30
1.8K0
springcloud笔记(一) Eurake和Ribbon,RestTemplate 的学习与测试案例
以上只是有两个项目,一个项目A 调用B项目,在A项目里面写死B项目的地址进行调用;
一写代码就开心
2022/05/09
6410
springcloud笔记(一) Eurake和Ribbon,RestTemplate 的学习与测试案例
总结:使用 RestTemplate 发送HTTP请求
一般发送HTTP请求是使用 Apache的HttpClient,它比较灵活。在 spring cloud 中往往提供的 REST 风格的服务。RestTemplate 提供了一种简单便捷的模板类来进行HTTP操作的方式。
张云飞Vir
2021/05/18
3.3K0
Spring之RestTemplate使用小结一
作为一个Java后端,需要通过HTTP请求其他的网络资源可以说是一个比较常见的case了;一般怎么做呢?
一灰灰blog
2018/08/13
6.6K0
Spring之RestTemplate使用小结一
Spring3 RestTemplate
RestTemplate是执行HTTP请求的同步阻塞式的客户端,它在HTTP客户端库(例如JDK HttpURLConnection,Apache HttpComponents,okHttp等)基础封装了更加简单易用的模板方法API。也就是说RestTemplate是一个封装,底层的实现还是java应用开发中常用的一些HTTP客户端。但是相对于直接使用底层的HTTP客户端库,它的操作更加方便、快捷,能很大程度上提升我们的开发效率。
HLee
2021/04/25
3.4K0
Spring3 RestTemplate
RestTemplate 用法详解「建议收藏」
上篇文章带大家学习了一下基本的微服务环境搭建,由 provider 提供服务, consumer 通过 DiscoveryClient 先去 eureka 上获取 provider 的服务的地址,获取到地址之后再去调用相关的服务。在服务的调用过程中,使用到了一个工具,叫做 RestTemplate,RestTemplate 是由 Spring 提供的一个 HTTP 请求工具。在上文的案例中,开发者也可以不使用 RestTemplate ,使用 Java 自带的 HttpUrlConnection 或者经典的网络访问框架 HttpClient 也可以完成上文的案例,只是在 Spring 项目中,使用 RestTemplate 显然更方便一些。在传统的项目架构中,因为不涉及到服务之间的调用,大家对 RestTemplate 的使用可能比较少,因此,本文我们就先来带领大家来学习下 RestTemplate 的各种不同用法,只有掌握了这些用法,才能在微服务调用中随心所欲地发送请求。
全栈程序员站长
2022/11/01
3.8K0
Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解)
RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。
Java_老男孩
2019/12/02
11.7K1
精讲RestTemplate第3篇-GET请求使用方法详解
二者的主要区别在于,getForObject()返回值是HTTP协议的响应体。getForEntity()返回的是ResponseEntity,ResponseEntity是对HTTP响应的封装,除了包含响应体,还包含HTTP状态码、contentType、contentLength、Header等信息。
字母哥博客
2020/09/23
6.1K0
精讲RestTemplate第3篇-GET请求使用方法详解
Java中restTemplate的使用
原文链接 GitHub项目地址 Gitee项目地址 本文介绍restTemplate基础用法。 Java中get和post的用法请参考:Java中Get和Post的使用 1 提供get/post接口 1.1 Controller @RestController @RequestMapping("/homepage") public class MyController { @Autowired MyService myService; // 提供get接口 @GetMap
代码的路
2023/03/21
7000
使用Spring RestTemplate访问Rest服务
  上面这段是RestTemplate类中的简单介绍,RestTemplate是Spring3.0后开始提供的用于访问 Rest 服务的轻量级客户端,相较于传统的HttpURLConnection、Apache HttpClient、OkHttp等框架,RestTemplate大大简化了发起HTTP请求以及处理响应的过程。本文关注RestTemplate是如何使用的,暂不涉及内部的实现原理。
happyJared
2018/09/20
1.8K0
使用Spring RestTemplate访问Rest服务
SpringBoot系列之RestTemplate使用示例
博主之前经常对接一些接口,所以发现写一些http请求比较麻烦,学习springboot的过程知道可以用RestTemplate来做http请求,RestTemplate是Spring Framework框架封装的基于模板方法设计模式的一个工具类,带有同步模板方法 API 的原始 Spring REST 客户端类,下面博主分析一些对接过程的一些经验,RestTemplate基本使用可以参考官网文档:https://docs.spring.io/spring-framework/docs/5.1.6.RELEASE/spring-framework-reference/integration.html#rest-client-access
SmileNicky
2022/05/07
1.7K0
SpringBoot系列之RestTemplate使用示例
【SpringBoot技术专题】「实战指南」从实战开发角度去分析操作RestTemplate的应用及使用技巧
当你的应用程序需要访问远程接口时,很容易被不同的浏览器和API调用协议弄晕。幸运的是,Spring框架已为我们提供了一个简单而功能强大的RestTemplate工具,它可以轻松地处理这些基础任务并提供一个简单的方式来访问各种API。
码界西柚
2023/04/13
1.9K0
【SpringBoot技术专题】「实战指南」从实战开发角度去分析操作RestTemplate的应用及使用技巧
Spring Cloud Ribbon:负载均衡的服务调用
在微服务架构中,很多服务都会部署多个,其他服务去调用该服务的时候,如何保证负载均衡是个不得不去考虑的问题。负载均衡可以增加系统的可用性和扩展性,当我们使用RestTemplate来调用其他服务时,Ribbon可以很方便的实现负载均衡功能。
macrozheng
2019/09/17
8380
使用 RestTemplate 进行第三方Rest服务调用
RestTemplate 是 Spring 提供的一个调用 Restful 服务的抽象层,它简化的同 Restful 服务的通信方式,隐藏了不必要的一些细节,让我们更加优雅地在应用中调用 Restful 服务 。但是在 Spring 5.0 以后RestTemplate处于维护模式,不再进行新特性的开发,仅仅进行一些日常维护。Spring 建议我们使用同时支持同步、异步和 Stream 的另一个 API —— WebClient 。但是在 Spring MVC 下目前我们还没有更好的选择。
码农小胖哥
2020/04/17
1.5K0
使用 RestTemplate 进行第三方Rest服务调用
相关推荐
详解 RestTemplate 操作
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档