LINE Messaging API SDK 大改版

舊的 API 呼叫方式被淘汰,記得要更新程式碼了

最近碰巧在升級一個 Chatbot 專案,意外發現官方的 Node.js LINE Bot SDK @line/bot-sdk 有重大改版,版本號躍進到了 8.x.x,也會在程式碼當中看到一些既有 API 被淘汰的訊息(Deprecation),在本文當中將說明如何升級與緣由。

SDK 升級指南,以 Node.js 為例

雖然目前過往的程式碼都能運作,但在 SDK 上最主要的修改有兩大部分:

初始化 SDK Client

首先在初始化 Client 的部分,會發現 Class 名稱已經有改變:

const line = require('@line/bot-sdk');
const clientConfig = {
  channelAccessToken: 'YOUR_CHANNEL_ACCESS_TOKEN',
  channelSecret: 'YOUR_CHANNEL_SECRET'
};

// SDK v8+ 新的做法 
const client = new line.messagingApi.MessagingApiClient(clientConfig);

// 先前做法
const client = new line.Client(clientConfig);

呼叫 API 的參數格式

而在呼叫 function 所需要的參數,也有一些格式上的改變:

const message: TextMessage = {
  type: 'text',
  event.message.text, // 舉例
};

// SDK v8+ 新的做法 
await client.replyMessage({
  replyToken: replyToken,
  messages: [message],
});

// 先前做法
await client.replyMessage(replyToken, message);

詳細各個 API 的格式改變,可以閱讀官方的 API 文件。其他語言 SDK 的修改也大多大同小異,可以透過專案 Changelog 來了解狀況。

日新月異的 LINE API

至於為什麼會有這麼大的變更?原因在於 LINE 本身 API 功能日新月異在進步,光是今年 2024 至今才過一個半月,就已經推出了:

那過往每次只要有新的 API 更新,SDK 也就得做出對應的功能調整,考慮到官方支援的語言相當的多(Node.js / Python / Ruby / Swift / Java / Go 等),其實這個過程往往會需要花上不少時間,使得開發者沒辦法在第一時間使用新功能。

作為 LINE API Expert 的我,在過去當中也數次針對不同語言的 SDK 做出貢獻,然而這真的是得花費非常多時間,且每次修改之後也都需要對應的測試與程式碼審查等等,最後才能夠真正發布新版。

LINE OpenAPI 的誕生

於是為了解決這個問題,LINE 官方推出了 line-openapi 的專案,此專案使用 OpenAPI 格式,以 API 文件紀錄了目前官方的最新 API 功能。

而 OpenAPI 作為一個業界通用的格式,其最大的優點是有豐富的生態系,除了可以自動化產生標準 API 文件之外,像是常用的 HTTP 開發工具 Postman 也有內建支援匯入 OpenAPI 文件的功能,就可以很快地開始做 API 的對應測試。

而回到本文的重點,官方也決定透過 OpenAPI 配合對應的自動化程式碼產生 API Client,也因此才會有了這次的升級需求。