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的更多相关文章

  1. 半吊子学习Swift--天气预报程序-获取天气信息

    昨天申请的彩云天气Api开发者今天上午已审核通过  饭后运动过后就马不停蹄的来测试接口,接口是采用经纬度的方式来获取天气信息,接口地址如下 https://api.caiyunapp.com/v2/ ...

  2. 关于实现手机端自动获取天气的demo

    博主大二做的一个项目,当时很傻很天真,但是还是贴出来,希望能给大家一点帮助.欢迎转载哦!我的博客园地址:http://www.cnblogs.com/natureless/ 首先分析需求,移动端实现天 ...

  3. 内网公告牌获取天气信息解决方案(C# WebForm)

    需求:内网公告牌能够正确显示未来三天的天气信息 本文关键字:C#/WebForm/Web定时任务/Ajax跨域 规划: 1.天定时读取百度接口获取天气信息并存储至Txt文档: 2.示牌开启时请求Web ...

  4. C#调用WebService获取天气信息

    概述 本文使用C#开发Winform应用程序,通过调用<WebXml/>(URL:http://www.webxml.com.cn)的WebService服务WeatherWS来获取天气预 ...

  5. JS调用腾讯接口获取天气

    想做个直接通过JS获取某个城市的天气.本来想通过直接调用中国气象网的接口: http://www.weather.com.cn/weather/101070201.shtml,但是跨域问题一直无法解决 ...

  6. java获取天气信息

    通过天气信息接口获取天气信息,首先要给项目导入程序所需要的包,具体需要如下几个包: json-lib-2.4.jar ezmorph-1.0.6.jar commons-beanutils-1.8.3 ...

  7. Kettle通过Webservice获取天气信息

      Kettle通过Webservice获取天气信息 需求: 通过kettle工具,通过webservice获取天气信息,写成xml格式文件. 思路: Kettle可通过两种选择获取webservic ...

  8. Java通过webservice接口获取天气信息

    通过SOAP请求的方式获取天气信息并解析返回的XML文件. 参考: http://www.webxml.com.cn/WebServices/WeatherWS.asmx import java.io ...

  9. ajax无刷新获取天气信息

    浏览器由于安全方面的问题,禁止ajax跨域请求其他网站的数据,但是可以再本地的服务器上获取其他服务器的信息,在通过ajax请求本地服务来实现: <?php header("conten ...

  10. webservice获取天气信息

    效果 1.eclipse中新建一个Java项目 2.通过命名获取天气的客户端信息 首先,打开天气网站http://ws.webxml.com.cn/WebServices/WeatherWS.asmx ...

随机推荐

  1. API获取商品评论?

    前言 小伙伴们好,前两天因为个人原因耽误了内容的更新,在这里和所有的小伙伴道个歉,今天CC和大家唠唠商品评论的这个话题,大家在网上购物的决策会因为<商品评论的好坏>吗,相信绝大的一部分的小 ...

  2. vue之列表渲染v-for

    目录 简介 用法 v-for可循环的几种变量的展示 数组的循环展示 对象的循环展示 字符串的循环展示 数字的循环展示 v-for搭档key值的说明 js循环几种方式 基于索引的循环 数组的循环 数组基 ...

  3. SQL里按照年月日分组统计

    Mysql中使用DATE_FORMAT函数实现是相对简单的. 根据format字符串格式化date值.下列修饰符可以被用在format字符串中: %M 月名字(January--December) % ...

  4. ChatGPT 和 Midjourney 初体验

    ChatGPT 和 Midjourney 这两个系统这些天红的发紫,自己也尝试着注册和使用了一下. 一.ChatGPT 我在上周才刚刚注册 OpenAI,注册过程也比较麻烦. 国内的 IP 是无法访问 ...

  5. defineProperty在数据劫持后是如何通知数据的更新和视图的更新的

    vue的双向绑定是由数据劫持结合发布者-订阅者模式实现的,那么什么是数据劫持?vue是如何进行数据劫持的?说白了就是通过Object.defineProperty()来劫持对象属性的setter和ge ...

  6. Kurator v0.3.0版本发布

    摘要:2023年4月8日,Kurator正式发布v0.3.0版本. 本文分享自华为云社区<华为云 Kurator v0.3.0 版本发布!集群舰队助力分布式云统一管理>,作者:云容器大未来 ...

  7. odoo 开发入门教程系列-QWeb简史

    QWeb简史 到目前为止,我们的房地产模块的界面设计相当有限.构建列表视图很简单,因为只需要字段列表.表单视图也是如此:尽管使用了一些标记,如<group>或<page>,但在 ...

  8. nginx概要

    新机(CentOS7)配置nginx: 一. 更新yum源为阿里云镜像 ping mirrors.aliyun.com mv /etc/yum.repos.d/CentOS-Base.repo /et ...

  9. Java实现平衡二叉搜索树(AVL树)

    上一篇实现了二叉搜索树,本章对二叉搜索树进行改造使之成为平衡二叉搜索树(Balanced Binary Search Tree). 不平衡的二叉搜索树在极端情况下很容易退变成链表,与新增/删除/查找时 ...

  10. 笔记:C++学习之旅---面向对象程序的设计1

    笔记:C++学习之旅---面向对象程序的设计1 面向对象的主要特征 1.抽象 2.封装 3.继承 4.多态 抽象:将程序的每一部分都看作一个抽象的对象,即程序有一组抽象的对象组成的更复杂点,这些对象根 ...