阿里雲冷門 API/SDK 對接心得

罐裝仙人掌CuratorC發表於2021-04-22

以『媒體轉碼服務』為例

這裡提到的冷門指的是網上缺少討論,出現問題難以搜尋到解決方案,難以獲得討論的SDK,如何依靠有限的經驗解決當前問題。

首先要樹立一個信心:

  • 阿里爸爸的產品這麼香,肯定不是某個不負責任的小編用兩張網圖編出來了個api介面。

  • 就算是產品再不人性化,也是經過了嚴格的評定和測試流程才掛到阿里雲產品ㅤ騙錢ㅤ 造福大眾的的。

  • 獲取製作這個產品的時候阿里雲投入的產品力量不足,或許開發者由於某些思維慣性,沒有在文件中寫入一些細節,或者我們的知識、經驗積累還不夠,沒辦法第一時間理解某些引數的含義。

  • 但是隻要挖掘到阿里雲在編寫文件時的盲點,理解了呼叫方式,最終總能完成對接,給自己的技能庫添磚加瓦。

與官方文件的第一步交鋒

  • 當我們嘗試從官方途徑尋找文件的時候,第一步總是能找到阿里雲的『幫助文件』,對於很多熱門產品,尤其是如OSS般的當紅炸子雞,賺錢小能手,這類產品的幫助文件已經被打磨的足夠完善。

  • 可惜今天的例子『媒體轉碼服務』可能還不在此列。當你點選入我提供的連結時,聰明的你可能很快就會發現一個問題:介面地址是什麼?

  • 當然我們不能冤枉阿里雲幫助文件,他們在媒體服務中還是提供了介面地址的,介面地址位於 >媒體處理 >API參考 >呼叫方式 >請求結構 >服務地域。如果要我們每個人都像這樣去尋找每一個資訊,那就要求我們每個人都要把整篇文件大致讀一遍。這樣就增加了很多的學習成本。

  • 回到『媒體轉碼服務』的幫助文件繼續往下讀,你會發現介面還需要我們提供一個管道ID模板ID。讀到這裡我們已經意識到了問題的嚴重性:不要逃課了,先把整篇文件通讀一遍吧,求求你了。

  • 很抗拒,通讀太累了。那就挑一些關鍵的資訊看一看。比如API概述呼叫方式之類的。這時候我們再順手翻一翻控制檯,能得到阿里雲提供的一個固定的管道ID,使用控制檯手動轉碼,能從他們的呼叫方式裡獲得公共的預設的模板ID。有點兒像是玩解密RPG?

  • OK,資訊夠了,但也沒完全夠,這些介面還要驗籤。看到驗籤我終於堅持不下去了,繼續逃課,選擇使用他們封裝好的SDK做開發。

SDK:逃課好幫手

  • 文件中的SDK 參考要我們看『安裝』,安裝文件給了我們一個github 倉庫,和一行require_once程式碼。

  • 感謝composer為我們養成了懶惰的引用習慣,看到require_once我不自覺要尋找composer版本的引用。但網上查到的都是抱怨阿里雲自己沒做composer,和個人自己做的composer版本。

  • 這還是在2021年4月18日的搜尋結果,在4天后的22號,情況已經不同了。

  • 跳過自己改composer的步驟,後來我在查詢資料的時候發現阿里雲悄悄推出了新的SDK平臺『阿里雲OpenApi』。這兩天好像正在排查舊SDK的引用,準備全面引入新的平臺上。

  • 但是不要高興的太早,等真正細讀下來才發現這個平臺對我們的冷門SDK還是沒有足夠的支援。只告訴你要用哪個方法呼叫這一步,引數要怎麼填,是什麼格式,什麼含義,依舊一頭霧水。

SDK不完善,只能靠API文件來補課。

  • 某些SDK的相關示例中,有標識為社群提供,但明顯不是社群寫的輸入引數示意,提到了引數格式,引數含義,引數詳情。當我們點選『引數詳情』時,API 文件:沒想到吧,我又回來啦!

  • SDK 初始化中要填寫一個引數 $config->endpoint。一開始我在這裡填了ossendpointSDK直接報錯404,內容大概是it is not a map,翻閱多層原始碼才知道,這個endpoint就是介面呼叫地址,也就是之前我們在API文件中找到的服務地域

  • 我充分利用以上多方面資料來源,終於將SDK跑了起來。這一步常常會遇到資料格式不正確的報錯。這時候要結合文件,示例,將引數傳遞方式在以下多種格式中選擇合適的格式使用。


[

    // 陣列

    "input" => [

        'Bucket'    => config('aliyun.oss.bucket'),

        'Location'    => config('aliyun.mts.location'),

        'Object'    => urlencode($url),

    ],

    // json 物件

    "input" => json_encode([

        'Bucket'    => config('aliyun.oss.bucket'),

        'Location'    => config('aliyun.mts.location'),

        'Object'    => urlencode($url),

    ]),

    // json 陣列

    "input" => json_encode([

        [

            'Bucket'    => config('aliyun.oss.bucket'),

            'Location'    => config('aliyun.mts.location'),

            'Object'    => urlencode($url),

        ],

        [

            'Bucket'    => config('aliyun.oss.bucket'),

            'Location'    => config('aliyun.mts.location'),

            'Object'    => urlencode($url),

        ],

    ]),

]
本作品採用《CC 協議》,轉載必須註明作者和本文連結
忠誠,秩序,卓越,博愛,開拓

相關文章