以『媒體轉碼服務』為例
這裡提到的
冷門
指的是網上缺少討論,出現問題難以搜尋到解決方案,難以獲得討論的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
。一開始我在這裡填了oss
的endpoint
,SDK
直接報錯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 協議》,轉載必須註明作者和本文連結