官术网_书友最值得收藏!

Showing a forecast

We still have not shown a forecast yet. We will use data from open weather map (http://www.openweathermap.org). You can create an account on their website. With your account, you can request an API token. You need the token to request the forecast. A free account is limited to 60 requests per second and 50,000 requests per day.

We save the API token in a separate file, lib/config.ts:

export const openWeatherMapKey = "your-token-here"; 
export const apiURL = "http://api.openweathermap.org/data/2.5/"; 

Tip

Add constants to a separate file

When you add constants in separate configuration files, you can easily change them and your code is more readable. This gives you better maintainable code.

Using the API

We will create a new file, lib/api.ts, that will simplify downloading data from open weather map. The API uses URLs such as http://api.openweathermap.org/data/2.5/forecast?mode=json&q=Utrecht,NL&appid=your-token-here. We will create a function that will build the full URL out of forecast?mode=json&q=Utrecht,NL. The function must check whether the path already contains a question mark. If so, it must add &appid=, otherwise ?appid=:

import { openWeatherMapKey, apiURL } from "./config"; 
 
export function getUrl(path: string) { 
  let url = apiURL + path; 
  if (path.indexOf("?") === -1) { 
    url += "?"; 
  } else { 
    url += "&"; 
  } 
  url += "appid=" + openWeatherMapKey; 
  return url; 
} 

Tip

Write small functions

Small functions are easy to reuse. This reduces the amount of code you need to write. The same applies to components—small components are easy to reuse.

Typing the API

You can open the URL in the previous section to get a look at the data you get. We will write an interface for the part of the API that we will use:

export interface ForecastResponse { 
  city: { 
    name: string; 
    country: string; 
  }; 
  list: ForecastItem[]; 
} 
export interface ForecastItem { 
  dt: number; 
  main: { 
    temp: number 
  }; 
  weather: { 
    main: string, 
    description: string 
  }; 
} 

Tip

JSDoc comments

You can add documentation for interfaces and their properties by adding a JSDoc comment before it:

/*** Documentation here */

主站蜘蛛池模板: 柳河县| 楚雄市| 敦化市| 北京市| 连南| 鄂温| 比如县| 汝城县| 襄垣县| 甘肃省| 利辛县| 比如县| 金山区| 洪湖市| 叶城县| 巴彦淖尔市| 临夏县| 南投市| 张家港市| 万山特区| 阿城市| 江永县| 中牟县| 桂东县| 成武县| 十堰市| 平乐县| 甘泉县| 左贡县| 神木县| 修文县| 治县。| 沙湾县| 绥滨县| 鞍山市| 旌德县| 建昌县| 滦平县| 渝北区| 鄂尔多斯市| 运城市|