一起艳学天气微服务(一)

一起艳学天气微服务(一)

天气系统,就是api获取地方的天气,把天气显示到前端。一个系统是庞大的,但可以拆分多个单一的小服务。

这里写图片描述

改造成这样的微服务可以让系统更具可维护性,可扩展性。那如何实现一个简单的微服务呢?

首先我们先找个天气的免费的api服务,https://wx.jdcloud.com/market/datas/26/11065要找的不是阿里云,不是百度云,是京东云。这里提供了两个api
天气预报查询https://way.jd.com/jisuapi/weather
获取城市https://way.jd.com/jisuapi/weather1
天气预报查询接口由极速数据平台所提供,数据专业、标准、极速、稳定,请用户放心使用。
数据简介:全国3000多个省市的天气预报查询,包括实时天气气温、最高最低温度、风级、风力、湿度、气压,穿衣、运动、洗车、感冒、空气污染扩散、紫外线等指数,7天天气、风力、最低最高温度、日出日落时间,未来24小时的时天气、气温,空气质量指数、PM2.5指数、主要污染物等信息。

知道了api后,我们看返回的数据,一般是使用json数据,

{
    "code": "10000",
    "charge": false,
    "msg": "查询成功",
    "result": {
        "status": "0",
        "msg": "ok",
        "result": {
            "city": "安顺",
            "cityid": "111",
            "citycode": "101260301",
            "date": "2015-12-22",
            "week": "星期二",
            "weather": "多云",
            "temp": "16",
            "temphigh": "18",
            "templow": "9",
            "img": "1",
            "humidity": "55",
            "pressure": "879",
            "windspeed": "14.0",
            "winddirect": "南风",
            "windpower": "2级",
            "updatetime": "2015-12-22 15:37:03",
            "index": [
                {
                    "iname": "空调指数",
                    "ivalue": "较少开启",
                    "detail": "您将感到很舒适,一般不需要开启空调。"
                },
                {
                    "iname": "运动指数",
                    "ivalue": "较适宜",
                    "detail": "天气较好,无雨水困扰,较适宜进行各种运动,但因气温较低,在户外运动请注意增减衣物。"
                }
            ],
            "aqi": {
                "so2": "37",
                "so224": "43",
                "no2": "24",
                "no224": "21",
                "co": "0.647",
                "co24": "0.675",
                "o3": "26",
                "o38": "14",
                "o324": "30",
                "pm10": "30",
                "pm1024": "35",
                "pm2_5": "23",
                "pm2_524": "24",
                "iso2": "13",
                "ino2": "13",
                "ico": "7",
                "io3": "9",
                "io38": "7",
                "ipm10": "35",
                "ipm2_5": "35",
                "aqi": "35",
                "primarypollutant": "PM10",
                "quality": "优",
                "timepoint": "2015-12-09 16:00:00",
                "aqiinfo": {
                    "level": "一级",
                    "color": "#00e400",
                    "affect": "空气质量令人满意,基本无空气污染",
                    "measure": "各类人群可正常活动" }
            },
            "daily": [
                {
                    "date": "2015-12-22",
                    "week": "星期二",
                    "sunrise": "07:39",
                    "sunset": "18:09",
                    "night": {
                        "weather": "多云",
                        "templow": "9",
                        "img": "1",
                        "winddirect": "无持续风向",
                        "windpower": "微风" },
                    "day": {
                        "weather": "多云",
                        "temphigh": "18",
                        "img": "1",
                        "winddirect": "无持续风向",
                        "windpower": "微风" }
                }
            ],
            "hourly": [
                {
                    "time": "16:00",
                    "weather": "多云",
                    "temp": "14",
                    "img": "1"
                },
                {
                    "time": "17:00",
                    "weather": "多云",
                    "temp": "13",
                    "img": "1"
                }
            ]
        }
    }
}

有了这些数据,我们怎么转为java实体呢?没奶油逐个去写属性吧。这时候我们推荐一个艳辉工具http://47.98.237.162/tool/jsonToJavaBean 前端做得比较简陋,但用途比较强大。想获取源码可以加QQ490647751开通我们艳辉VIP。

这里写图片描述

自动生成实体后,我们编写逻辑代码

public ScenicResponse getDataByCityName(String json) {
        return this.doGetWeatherData(json);
    }


    private ScenicResponse doGetWeatherData(String json) {
        ScenicResponse weather;
        try {
            weather = (ScenicResponse) _jsonUtil.json2Bean(json, ScenicResponse.class);
        } catch (Exception e) {
            throw new RuntimeException("天气信息解析失败");
        }

        return weather;
    }

就是把json字符串转为java对象,返回前端,接下来编写控制层

@GetMapping("/cityName/{cityName}")
    public ScenicResponse getDataByCityName(@PathVariable("cityName") String cityName) throws Exception {
        String url = "https://way.jd.com/jisuapi/weather?city="+cityName+"&appkey="+jdyApi;
        JSONObject json = getRequestFromUrl(url);;
        System.out.println(json.toString());
        return scenicDataService.getDataByCityName(json.toString());
    }

简单的RESTful API就实现了。

我们将会以系统分层、服务测试、服务拆分、服务通信、服务注册、服务发现、服务消费、集中配置、日志管理、容器部署、安全防护、自动扩展等方面介绍微服务。源码下载地址:http://47.98.237.162/detail/1/165

猜你喜欢

转载自blog.csdn.net/sinat_15153911/article/details/81210571
今日推荐