M+應用程式介面簡介

Micah Walter
M+ Labs
Published in
6 min readDec 18, 2018
M+的應用程式介面(API)會成為博物館網頁、展廳科技及應用程式的「大腦」。(插圖由Justine Braisted繪畫)

我叫Micah Walter,是紐約Micah Walter Studio的創辦人,專門協助世界各地博物館建立數碼產品及設計數碼體驗。最近一年半,我一直與M+合作,協助它推行「開放取用」計劃,將館藏放到網上公諸於眾,並建立所需的工具及基礎結構。這個計劃原本只為探索該館快速增加的館藏,但很快就發展成一個長期項目,並以開放藏品並使其易於取用為目標。這段經歷十分精彩,我很高興能訴諸筆墨,與大家深入分享。

在我們與M+的合作中,最重要的一項在於建立其開放取用數據集及應用程式介面(API),讓開發人員、學生、合作者及M+本身以編程方式存取藏品。9月初,M+向全世界開放首批公共數據集,並舉行了首個關於數碼藝術的座談會「M+ 思考:數碼領域裏的藝術與設計」。除了開放數據外,M+更推出了首個公共API,讓開發人員以編程方式存取這個數據集。

此文將從技術層面深入探究API,並介紹可以以哪些有趣的方式運用這些開放予全世界的資料。如果你想得到更多靈感,不妨看看M+團隊成員王碧雲為回顧「M+數據設計黑客松」所撰的文章。「M+數據設計黑客松」已於本年9月舉行,是「M+思考」講座的一部分,以慶祝M+推出API及發佈首個開放數據集。

如何使用M+ API

目前M+ API上的數據,是與在M+的GitHub頁面上公開的一樣。現在,M+ API是為滿足開發人員的需要而存在。若你撰寫應用程式或bot時需要以實時方式取用M+的數據,M+ API可大派用場。如你正進行數據分析或數據視覺化,就更應該考慮以單一CSV檔案從GitHub下載數據集。

有了M+ API,你便可以輕鬆探索M+藏品系列的數據集,自行建立複雜查詢,並將M+的數據整合到你的應用程式。API內的數據每晚都會更新,這表示你的應用程式亦會每晚更新。

想着手運用數據,請到https://api.mplus.org.hk建立帳戶。你可以用電郵地址登記,或以Twitter或Facebook登入。登入後,系統會將獨一無二的API密鑰寄給你。當你在應用程式對API建立請求時,將須使用這個密鑰。儀表版和API Playground調試工具會自動將你的API密鑰加到代碼段例子及playground請求。

現在,你已登記帳戶並得到API密鑰,可以開始使用API你可閱讀指南,嘗試一些代碼段例子,或運行API Playground調試工具;利用這個工具,你可隨心所欲地建立及進行查詢測試,並在瀏覽器看到所得結果。API Playground調試工具是將意念發展成原型及建立查詢的好地方;它設有探索的工具,讓你發掘不同查詢數據集的方式,並留下所有調用測試的歷史,方便查看紀錄及重複測試。

指南中亦有很多請求樣本,示範你可查詢的項目。每項都有以Javascript書寫的代碼段例子,並連結到Playground調試工具,以快速運行例子。

例如,你可運行以下查詢,開始使用API:

query {
hello
}

這個查詢向API發出一個簡單請求,並產生以下結果:

{
"data": {
"hello": "world"
}
}

這樣就能確保你的API密鑰運作正常,方法十分簡單。

體驗進行到這裏,難免會有點累。接下來,不如試試以下查詢:

query {
objects(page:0, per_page: 5, area: "Moving Image") {
id
objectNumber
title
displayDate
medium
classification {
area
category
}
}
}

在這個例子中,我們請求API回傳類別為「流動影像」的物件清單,更請求系統給予特定的結果:我們想知道這些物件的id、物件號碼(objectNumber)、標題(title)、展示日期(displayDate)、媒材(medium),及其他它們所屬的分類。我們亦指明僅顯示首五個結果。

我們在建立API時挑選了一個獨特的功能,名為GraphQL。GraphQL是API上的查詢語言,讓開發人員自定請求以接收所需數據,而不是大量不必要的混亂數據。這亦代表開發人員會預先知道將會收到哪些數據,因為請求的形式是他們自行創建的。

我的首個項目

在「M+數據設計黑客松」中,同為黑客松主持的Jane Pong和我決定也參與一下活動,建立屬於我們的原型。Jane選擇利用便利貼,實物模擬將藏品數據視覺化;而我則利用API,着手建立簡單應用程式,將藝術品名稱翻譯成繪文字。

這是編碼的副本:https://gist.github.com/micahwalter/8c4c2fca2f12ab85157736b2d751229f

過程十分簡單。

我建立了以下請求,以獲取物件名稱:

{
objects(per_page: 200) {
id
title
}
}

然後,我將物件名稱放到名為「moji-translate」的套件,將文字翻譯為繪文字。翻譯結果會到網頁上顯示,就像這樣:

我在「M+數據設計黑客松」中,示範用自行創建的應用程式將藏品名稱翻譯成繪文字。

透個這個簡單又有趣的方法,我就能確保自己成功連線到API,並接收我所請求的數據。再者,這還是個挺好玩的示範。

技術棧

這些年來,世界各地的博物館都努力透過API,讓他們的數據變得容易取用;而我們為M+選擇了能給予M+更大靈活度的技術棧(tech stack)。它是這樣運作的:

1) 我們每晚均透過預存程序,從M+的藏品管理系統中取得數據。這些數據將會以龐大的XML檔案形式,儲存到我們的伺服器內。

2) 然後我們會過濾及整理這個XML檔案的數據,並轉換成適當的格式將數據存放到ElasticSearch索引內。這將會成為強大的搜尋引擎,讓我們對數據庫提出查詢。

3) 最後,我們透過Node、Express及GraphQL建成的公共API,將這個搜尋器公諸於世。這個工具讓開發人員方便地查詢,並讓我們在未來繼續發展底下的技術棧。

我們很快就會為API添加新功能:增設以文字為本的進階查詢,允許以多個字段過濾數據,並隨着博物館的發展添加更多數據。這個API亦會M+相輔相成,令博物館更臻完善。最終,所有有關M+藏品的數據將會放到API,包括實體展廳內的科技、應用程式、數碼體驗,以及任何未來M+決定發展的網絡資源。這就是說,M+博物館的人員可繼續以TMS為管理藏品的系統,以之為可靠資料的來源,而API則會將這些內容傳遞到更廣泛的應用程式及工具。

來年,我們的工作室將繼續與M+合作發展API。我們將會增加更多字段,繼續擴大數據庫,並在API添加更多功能。現在,歡迎隨意運用這個API,看看能發展出甚麼有趣的意念!

--

--

Micah Walter
M+ Labs

Art, technology, museums, design, work, photography, and writing.