rust实现weatherforecast的获取天气webapi
rust用来写webapi可能有点大材小用,但是作为入门学习应该说是不错的选择。
cargo new webapi创建一个webapi项目,在src下面新建handler文件夹和models文件夹。

在models文件夹下面建立一个mod.rs和weatherforecast.rs文件。

weatherforecast.rs文件新建我们需要的WeatherForecast类,附上Serialize,Deserialize接口(trait)实现。
use chrono::NaiveDate;
use serde::{Serialize, Deserialize}; #[derive(Debug,Serialize,Deserialize)]
pub struct WeatherForecast{
pub date:NaiveDate,
pub temperature_c:i32,
pub temperature_f:i32,
pub summary:String
}
mod.rs文件作为管理模块,实体类需要导入,有多少实体类都可以放进去,后续就方便从这个模块中导出需要的类。

当然rust的webapi需要导入web开发需要的库,以及项目中需要的库,看名字就大概的猜到是什么作用了。

有了实体类,下面就写下get接口的实现,作为一个webapi架子,只用内存做存储
同样在handlers文件夹下面新建mod.rs和weatherforecast.rs

handlers下面的weatherforecast.rs代码如下
use crate::models::weatherforecast::WeatherForecast;
use actix_web::{get,HttpResponse,Responder};
use chrono::{Duration, Utc};
use rand::Rng; #[get("/getweatherforecast")]
pub async fn getweatherforecast()->impl Responder{
let mut rng = rand::thread_rng();
let summaries: Vec<&str> = vec!["Sunny","Cloudy","Rainy","Stormy"];
let weather_forecasts:Vec<WeatherForecast> = (1..=5).map(|index|{
let date = Utc::now().date_naive() + Duration::days(index);
let temperature_c = rng.gen_range(-20..=55);
let summary = summaries[rng.gen_range(0..summaries.len())].to_string();
let temperature_f = 32 + (temperature_c / 5 * 9);
WeatherForecast{
date,
temperature_c,
temperature_f,
summary:summary
}
}).collect();
HttpResponse::Ok().json(weather_forecasts)
}
handlers通过use crate::models::weatherforecast::WeatherForecast引用了models的模块,所以在main.rs中需要提前引入,代码如下:
#[path = "models/mod.rs"]
mod models;
#[path = "handlers/mod.rs"]
mod handlers; use actix_web::{App,HttpServer};
use handlers::*; #[actix_web::main]
async fn main()->std::io::Result<()> {
HttpServer::new(||{
App::new()
.service(weatherforecast::getweatherforecast)
}).bind("127.0.0.1:8088")?.run().await
}
到这里代码就写完了,下面运行一下看看效果:访问地址 127.0.0.1:8088/getweatherforecast

示例代码如下:
rust/webapi at main · liuzhixin405/rust · GitHub
rust实现weatherforecast的获取天气webapi的更多相关文章
- 半吊子学习Swift--天气预报程序-获取天气信息
昨天申请的彩云天气Api开发者今天上午已审核通过  饭后运动过后就马不停蹄的来测试接口,接口是采用经纬度的方式来获取天气信息,接口地址如下 https://api.caiyunapp.com/v2/ ...
- 关于实现手机端自动获取天气的demo
博主大二做的一个项目,当时很傻很天真,但是还是贴出来,希望能给大家一点帮助.欢迎转载哦!我的博客园地址:http://www.cnblogs.com/natureless/ 首先分析需求,移动端实现天 ...
- 内网公告牌获取天气信息解决方案(C# WebForm)
需求:内网公告牌能够正确显示未来三天的天气信息 本文关键字:C#/WebForm/Web定时任务/Ajax跨域 规划: 1.天定时读取百度接口获取天气信息并存储至Txt文档: 2.示牌开启时请求Web ...
- C#调用WebService获取天气信息
概述 本文使用C#开发Winform应用程序,通过调用<WebXml/>(URL:http://www.webxml.com.cn)的WebService服务WeatherWS来获取天气预 ...
- JS调用腾讯接口获取天气
想做个直接通过JS获取某个城市的天气.本来想通过直接调用中国气象网的接口: http://www.weather.com.cn/weather/101070201.shtml,但是跨域问题一直无法解决 ...
- java获取天气信息
通过天气信息接口获取天气信息,首先要给项目导入程序所需要的包,具体需要如下几个包: json-lib-2.4.jar ezmorph-1.0.6.jar commons-beanutils-1.8.3 ...
- Kettle通过Webservice获取天气信息
Kettle通过Webservice获取天气信息 需求: 通过kettle工具,通过webservice获取天气信息,写成xml格式文件. 思路: Kettle可通过两种选择获取webservic ...
- Java通过webservice接口获取天气信息
通过SOAP请求的方式获取天气信息并解析返回的XML文件. 参考: http://www.webxml.com.cn/WebServices/WeatherWS.asmx import java.io ...
- ajax无刷新获取天气信息
浏览器由于安全方面的问题,禁止ajax跨域请求其他网站的数据,但是可以再本地的服务器上获取其他服务器的信息,在通过ajax请求本地服务来实现: <?php header("conten ...
- webservice获取天气信息
效果 1.eclipse中新建一个Java项目 2.通过命名获取天气的客户端信息 首先,打开天气网站http://ws.webxml.com.cn/WebServices/WeatherWS.asmx ...
随机推荐
- 从pcap文件中提取pcma音频
操作系统 :Windows10_x64 .CentOS 7.6.1810_x64 wireshark版本:3.6.12 Python 版本 : 3.9.12 一.背景描述 工作中有时候会遇到需要从 ...
- C++类的构造函数、析构函数、拷贝构造函数、赋值函数和移动构造函数详细总结
目录 1. 五种函数介绍 2. 左值&右值怎么区分?怎么看? 3. 匿名对象的3种使用情况 4. 代码详细验证每个函数调用情况 4.1 测试 f_1 函数(函数形参测试 -- 值传递) 4.2 ...
- Rancher系列文章-Rancher v2.6使用脚本实现导入集群
概述 最近在玩 Rancher, 先从最基本的功能玩起, 目前有几个已经搭建好的 K8S 集群, 需要批量导入, 发现官网已经有批量导入的文档了. 根据 Rancher v2.6 进行验证微调后总结经 ...
- iOS 深色模式适配
要求:iOS13.0以上 重点:需要所有界面进行适配,工作量巨大,需要从项目开始就进行适配:H5界面无法进行适配 实现方式:System Colors(常用).Semantic Colors(常用). ...
- 免费,小巧好用的pdf阅读器以及护眼模式颜色代码
免费,迷你,小巧pdf阅读器 https://www.sumatrapdfreader.org/downloadafter 网络上流行的眼神RGB值和颜色代码 绿色豆沙可以有效减轻长时间使用电脑的眼睛 ...
- python实现往飞书群发图片及消息
飞书提供了丰富的api来实现消息的通知,包括文本消息.图片消息.富文本消息,本次介绍使用飞书api发送富文本消息,以下是实现思路飞书API地址:https://open.feishu.cn/docum ...
- Idea快捷键——查找源码
双击shift 输入要查找源码类 相当于查 java_jdk_chm Ctrl+F12 :浏览类
- UESTC__ACM 1264 人民币的构造
链接地址:https://acm.uestc.edu.cn/contest/198/problem/J 我们都知道人民币的面值是1.2.5.10,为什么是这个数值呢,我们分析了下发现,从1~10的每个 ...
- S3 对象重命名
本文所述操作适用于兼容 S3 协议的所有存储框架,包括 AWS S3.Aliyun OSS.MinIO.Ceph 等. 不知为何,截止目前,S3 协议并不包含对象重命名的接口.如果有重命名对象的需求, ...
- ChatGPT Plugin 插件开发:基于 ASP.NET Core Minimal API
前言 这是一篇ChatGPT插件开发教程,描述如何使用 ASP.NET Core Minimal API 开发 ChatGPT 插件,以最简单的 Todo List 指导示例作为入门教程. 这个Tod ...