返回

告别硬编码:灵活访问API响应数据,提升代码灵活性

javascript

灵活访问响应API数据:告别硬编码

问题

当你编写一个需要获取用户输入的CLI命令时,你会遇到一个问题。你希望用户输入一个硬币名称和一个货币代码,然后将这些变量分配给响应数据。但是,这样会导致错误,因为硬编码的值与响应数据不匹配。

解决方案

为了解决这个问题,我们需要找到一种方法来动态地访问响应数据的属性。我们可以使用以下代码来实现:

let coinData = res.data.data[coinOption];

这将获取以coinOption为键的响应数据对象的相应值。例如,如果你将coinOption设置为BTC,它将返回以下对象:

{
  "id": 1,
  "name": "Bitcoin",
  "symbol": "BTC",
  "slug": "bitcoin",
  "num_market_pairs": 11018,
  "date_added": "2010-07-13T00:00:00.000Z",
}

现在,你可以访问coinData.symbol来获取硬币的符号,或coinData.name来获取硬币的名称,而无需硬编码。

更新后的代码

import axios from "axios";
import colors from "colors";

class CryptoAPI {
  constructor(apikey) {
    this.apikey = apikey;
    this.baseUrl =
      "https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest";
  }

  async getPriceData(coinOption, curOption) {
    try {
      const res = await axios.get(
        `${this.baseUrl}?symbol=${coinOption}&convert=${curOption}`,
        {
          headers: {
            "X-CMC_PRO_API_KEY": this.apikey,
          },
        }
      );

      let coinData = res.data.data[coinOption];
      let output = `Coin : ${coinData.symbol} (${coinData.name}) | Price : ${coinData.quote.INR.price} | Rank : ${coinData.cmc_rank} | Change 24H : ${coinData.quote.INR.percent_change_24h}%`;

      return output;
    } catch (error) {
      console.log(error);
    }
  }
}

export default CryptoAPI;

注意事项

确保输入的coinOption与响应数据中可用的值相匹配。否则,它将返回undefined,并可能导致错误。

结论

通过使用动态访问响应数据属性的方法,我们现在可以在不硬编码的情况下轻松获取和操作响应数据。这使我们的代码更加灵活、可扩展和易于维护。

常见问题解答

1. 硬编码有什么缺点?
硬编码会限制代码的可扩展性,因为如果API响应数据更改,代码将不再有效。

2. 如何在不访问每个属性的情况下循环遍历整个响应数据对象?
可以使用Object.keys()方法来获取对象的所有键,然后使用这些键来循环遍历对象。

3. 我可以在动态获取响应数据属性后修改它们吗?
是的,你可以修改动态获取的响应数据属性,但前提是确保响应数据对象不是只读的。

4. 我可以用这种方法获取嵌套对象中的属性吗?
是的,你可以通过将嵌套属性的键作为字符串连接起来来获取嵌套对象中的属性。例如,res.data.data.coin.symbol

5. 如何处理空值或不存在的属性?
你可以使用条件语句来检查属性是否存在,并相应地处理空值。例如,if (res.data.data.coin.symbol) { // do something }