国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

基于 Github API 的圖床 Chrome 插件開(kāi)發(fā)全紀(jì)錄

DoINsiSt / 2092人閱讀

摘要:最近基于開(kāi)發(fā)了一款圖床插件,現(xiàn)在已經(jīng)開(kāi)源并上架應(yīng)用商店。通過(guò)方法把轉(zhuǎn)成,然后放在里測(cè)試一下看來(lái)效果是的,接下來(lái)就是對(duì)圖床插件進(jìn)行開(kāi)發(fā)的步驟了。至此,整個(gè)插件的開(kāi)發(fā)發(fā)布流程就已經(jīng)完成了。

最近基于 Github API 開(kāi)發(fā)了一款圖床 Chrome 插件 Picee,現(xiàn)在已經(jīng)開(kāi)源并上架 Chrome 應(yīng)用商店。當(dāng)中的過(guò)程涉及到一些有趣的知識(shí)點(diǎn),故將其記錄下來(lái)。

Github地址:https://github.com/jrainlau/p...

Chrome商店下載地址:Picee

靈感

平時(shí)有寫(xiě)點(diǎn)東西的習(xí)慣,但是奈何一直找不到合適的圖床。有人推薦以微博或者七牛來(lái)做圖床,但是總給我一種”受制于人“的感覺(jué),不知道什么時(shí)候就會(huì)被各種限制,比如禁止圖片外鏈等等。后來(lái)發(fā)現(xiàn)其實(shí) Github 是非常適合做圖床的,因?yàn)閭}(cāng)庫(kù)里的文件都可以通過(guò) https://raw.githubusercontent.com 這個(gè)鏈接直接外鏈以供下載。但是如果為了寫(xiě)個(gè)文章而每次添加圖片都需要一頓 Git 操作,那么寫(xiě)作體驗(yàn)必定非常不好,如果有更方便的辦法就好了——那就是Github API。

Github API

Github 提供了一套完善的 API 以供操作,幾乎涵蓋了開(kāi)發(fā)一個(gè)完整 Github 客戶(hù)端的所有功能。API 分為 REST 風(fēng)格的 v3 版本和 GraphQL 風(fēng)格的 v4 版本。為了使用方便,我選擇的是 v3 版本。具體的 API 細(xì)節(jié)可以在官方文檔查看。

要制作一個(gè)圖床應(yīng)用,我們只需要用到上傳文件的 API 即可。但是在調(diào)用這個(gè) API 之前,首選需要用戶(hù)對(duì)應(yīng)用進(jìn)行授權(quán),也就是所謂的登錄操作。

授權(quán)

對(duì)于一般的”查看”操作,是不需要授權(quán)的,比如獲取用戶(hù)的公開(kāi)信息,獲取公有倉(cāng)庫(kù)的 issues 等等。但是有兩個(gè)場(chǎng)景是需要授權(quán)的,其一是任何對(duì)于倉(cāng)庫(kù)的“增刪改查”操作(包括提交 issue,評(píng)論等);其二則是對(duì)于某 IP 有 API 的調(diào)用次數(shù)限制,若這個(gè) IP 調(diào)用 Github API 的次數(shù)過(guò)多則需要授權(quán)。

那么授權(quán)應(yīng)該怎么做呢?官方提供了三種辦法,分別是 BasicoAuth2 tokenoAuth2 key/secret

Basic授權(quán)

也就是最傳統(tǒng)的賬號(hào)密碼授權(quán)方式,我們可以在命令行用 curl 來(lái)測(cè)試之:

curl -u "賬號(hào):密碼" https://api.github.com

如果是正確的賬號(hào)密碼,則會(huì)返回一系列的內(nèi)容,否則會(huì)返回錯(cuò)誤信息。

對(duì)于開(kāi)發(fā)來(lái)說(shuō),我更推薦使用 Postman 來(lái)對(duì) API 進(jìn)行測(cè)試:

點(diǎn)開(kāi)右邊的 code ,可以看到 JS 代碼:

其中 xhr.setRequestHeader("Authorization", "Basic xxxxxx");就是我們需要設(shè)置的授權(quán) header,當(dāng)中的 xxxxxx 是這么來(lái)的:

btoa(username + ":" + password)
oAuth2 token 授權(quán)

對(duì)于賬號(hào)密碼來(lái)說(shuō),輕易地在第三方平臺(tái)輸入其實(shí)并不那么安全,那么有沒(méi)有辦法既能保障賬戶(hù)的安全,又能實(shí)現(xiàn)授權(quán)的需求呢?答案就是 oAuth token。

簡(jiǎn)單來(lái)說(shuō),oAuth token 相當(dāng)于用戶(hù)提供給第三方的一張授權(quán)令牌,第三方通過(guò)這張令牌可以獲得用戶(hù)所允許使用的一系列權(quán)限,但是卻不會(huì)知曉用戶(hù)的賬號(hào)和密碼,于是便得以在有效保障用戶(hù)賬號(hào)安全的同時(shí),又能方便地對(duì)第三方應(yīng)用進(jìn)行授權(quán)。

在 Github 里,可以在這個(gè)地方設(shè)置生成具有某些權(quán)限的 token:

最后在 Postman 里選擇 OAuth 2.0 或者 Bearer Token,然后把這串 token 粘貼進(jìn)去即可。

其中的授權(quán) header 為 Bearer token

oAuth 2 key/secret授權(quán)

這種授權(quán)方式是通過(guò)生成一對(duì) key/secret,來(lái)允許第三方獲取用戶(hù)的公開(kāi)信息,是一種只讀的授權(quán)方式,無(wú)法對(duì)倉(cāng)庫(kù)進(jìn)行改寫(xiě)操作,主要用于第三方登錄,故在這里不適用。更多關(guān)于 key/secret 的內(nèi)容可以查看阮一峰的《GitHub OAuth 第三方登錄示例教程》,寫(xiě)得非常生動(dòng)詳細(xì)。

在了解了三種授權(quán)方式之后,我們就可以進(jìn)行下一步操作,實(shí)現(xiàn)圖片的上傳了。

圖片上傳 API

圖片上傳使用了 content API 的 create-a-file 接口,通過(guò) PUT 發(fā)送一條文件內(nèi)容為 base64 的請(qǐng)求到指定的倉(cāng)庫(kù)目錄。

這里著重圈出了必須把文件進(jìn)行 base64 編碼,否則接口調(diào)用將會(huì)出錯(cuò)。

通過(guò) btoa("hello world) 方法把 hello world 轉(zhuǎn)成 base64,然后放在 Postman 里測(cè)試一下:

看來(lái)效果是OK的,接下來(lái)就是對(duì)圖床插件進(jìn)行開(kāi)發(fā)的步驟了。

Chrome 插件開(kāi)發(fā)

除了看官方文檔學(xué)習(xí)插件開(kāi)發(fā)以外,也可以參考由@小茗同學(xué) 所寫(xiě)的《【干貨】Chrome插件(擴(kuò)展)開(kāi)發(fā)全攻略》,里面對(duì)于 Chrome 插件的開(kāi)發(fā)有著詳細(xì)的敘述,非常值得一讀。

讀完上面推薦的文章之后,我選擇使用 VueJS 進(jìn)行開(kāi)發(fā)。由于項(xiàng)目比較簡(jiǎn)單,所以我沒(méi)有用任何的打包工具,直接通過(guò) script 的方式引入 VueJS。值得注意的是,Chrome 插件不允許行內(nèi) script 和行內(nèi) style,所以任何的 css 和 js 文件都必須通過(guò)本地文件鏈接的方式去使用。另外由于我們的 JS 是運(yùn)行在 Chrome 環(huán)境的,所以可以放心大膽地使用 es 模塊和 async/await 等高級(jí)語(yǔ)法,而無(wú)需任何的構(gòu)建工具參與。

但是在使用 VueJS 的第一步我就遇到了問(wèn)題,綁定了 new Vue() 的 DOM 元素竟然顯示不出來(lái)。經(jīng)過(guò)查證,原來(lái) Chrome 插件有 Content Security Policy (CSP) 限制,默認(rèn)是不支持 eval(),new Function() 等方式運(yùn)行代碼的,而完整版的 VueJS 恰好是這么干的(官網(wǎng)有說(shuō)),所以就出問(wèn)題了。那么怎么解決呢?很簡(jiǎn)單,在 manifest.json 里面聲明一下就好了:

// manifest.json

{
  // ...
  "content_security_policy": "script-src "self" "unsafe-eval"; object-src "self""
}

這里我采用的是 popup 形式的插件,彈出來(lái)的窗口就是項(xiàng)目所定義的 index.html。如果要調(diào)試插件的頁(yè)面,可以直接在插件彈出的窗口點(diǎn)擊右鍵,然后點(diǎn)擊“檢查”,就會(huì)彈出我們熟悉的開(kāi)發(fā)者工具了。如果插件文件有改動(dòng),除了重新打開(kāi)插件以外,我們也可以在開(kāi)發(fā)者工具通過(guò) cmd + r 去直接刷新,省去了多次點(diǎn)擊的麻煩。

功能實(shí)現(xiàn)

經(jīng)過(guò)前面的準(zhǔn)備,我們已經(jīng)掌握了如何對(duì) Github API 進(jìn)行授權(quán)然后上傳圖片的辦法,接下來(lái)就是在業(yè)務(wù)邏輯里去實(shí)現(xiàn)它們。我封裝了一下原生的 fetch 方法,讓它更方便調(diào)用:

const $fetch = (options) => {
  return window.fetch(options.url, {
    method: options.method || "GET",
    headers: {
      "Content-Type": "application/json",
      "Authorization": localStorage.getItem("picee_token")
    },
    body: JSON.stringify(options.body) || null,
    mode: "cors"
  })
    .then(async res => {
      if (res.status >= 200 && res.status < 400) {
        return {
          status: res.status,
          data: await res.json()
        }
      } else {
        return {
          status: res.status,
          data: null
        }
      }
    })
    .catch(e => e)
}

export default $fetch

請(qǐng)求接口時(shí)攜帶的授權(quán) header 所需的 token,我把它們存放在插件的 localStorage 下,方便調(diào)用。

有了請(qǐng)求接口的方法以后,接下來(lái)就要完成選擇圖片和把圖片轉(zhuǎn)化成 base64 的工作。這里我復(fù)用了另一個(gè)作品里的 chooseImg.jspaste.js 方法,最終能夠支持以選擇、粘貼、拖拽的方式上傳圖片。

剩下的一些功能細(xì)節(jié)就不贅述了,代碼非常簡(jiǎn)單,建議讀者們自行查閱。

應(yīng)用發(fā)布

準(zhǔn)備好了 logo,描述等善后工作之后,就可以正式提交應(yīng)用發(fā)布了。我們可以在開(kāi)發(fā)者信息中心里面把插件提交上去,填入必要的信息以后點(diǎn)擊發(fā)布,等待審核完成。但是在此之前,你必須支付5美元的開(kāi)發(fā)者注冊(cè)費(fèi),國(guó)內(nèi)的開(kāi)發(fā)者在完成這一步的時(shí)候可能會(huì)遇到蠻大的困難,這一個(gè)問(wèn)題在知乎也有討論:如何在中國(guó)使用信用卡支付“Chrome 網(wǎng)上應(yīng)用店”開(kāi)發(fā)者注冊(cè)費(fèi)?。我是通過(guò)萬(wàn)能的淘寶搞定的。

在完成注冊(cè)之后和發(fā)布以后,就能看到插件的主頁(yè)了:

值得注意的是,剛發(fā)布的插件是暫時(shí)不能被搜索出來(lái)的,需要等待一段時(shí)間以后才能搜索出來(lái)。

至此,整個(gè)插件的開(kāi)發(fā)——發(fā)布流程就已經(jīng)完成了。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/109380.html

相關(guān)文章

  • 為什么我選擇用 Github issues 來(lái)寫(xiě)博客

    摘要:為什么不選擇其他方案在文章的開(kāi)頭我有提到,我曾經(jīng)嘗試過(guò)用,,自行搭建服務(wù)等途徑去嘗試維護(hù)博客。但這些嘗試的結(jié)果均不合我意,最后無(wú)疾而終。我們使用作為博客平臺(tái),也就是相當(dāng)于管理后端。showImg(https://user-gold-cdn.xitu.io/2019/5/22/16adf79473dbdf59); 對(duì)于愛(ài)寫(xiě)東西的人來(lái)說(shuō),挑一個(gè)合適的博客平臺(tái)是非常重要的。而作為一個(gè) Web 開(kāi)發(fā)...

    gnehc 評(píng)論0 收藏0
  • 為什么我選擇用 Github issues 來(lái)寫(xiě)博客

    摘要:為什么不選擇其他方案在文章的開(kāi)頭我有提到,我曾經(jīng)嘗試過(guò)用,,自行搭建服務(wù)等途徑去嘗試維護(hù)博客。但這些嘗試的結(jié)果均不合我意,最后無(wú)疾而終。我們使用作為博客平臺(tái),也就是相當(dāng)于管理后端。 showImg(https://segmentfault.com/img/remote/1460000019265125?w=700&h=420); 對(duì)于愛(ài)寫(xiě)東西的人來(lái)說(shuō),挑一個(gè)合適的博客平臺(tái)是非常重要的。...

    Scliang 評(píng)論0 收藏0
  • GitNote 基于 Git 的跨平臺(tái)筆記軟件正式發(fā)布

    摘要:基于的跨平臺(tái)筆記軟件為什么自從工作之后我開(kāi)始進(jìn)行筆記記錄這是一個(gè)很棒的習(xí)慣我曾經(jīng)使用過(guò)麥庫(kù)等都是一些不錯(cuò)的筆記軟件但是都有一些各式各樣的問(wèn)題不能滿(mǎn)足我的使用年我用編寫(xiě)了第一款筆記軟件支持和富文本編輯器但是沒(méi)有云同步功能年我用和編寫(xiě)了一個(gè)編輯 GitNote 基于 Git 的跨平臺(tái)筆記軟件 為什么 自從工作之后,我開(kāi)始進(jìn)行筆記記錄,這是一個(gè)很棒的習(xí)慣.我曾經(jīng)使用過(guò) EDiary Ever...

    liaosilzu2007 評(píng)論0 收藏0
  • 如何優(yōu)雅的生成海報(bào)/動(dòng)態(tài)合成圖片 ?

    摘要:感謝提供的圖床服務(wù)適用場(chǎng)景我希望這個(gè)項(xiàng)目用于渲染需要?jiǎng)討B(tài)合成的圖片,例如用戶(hù)名片需要?jiǎng)討B(tài)渲染名字和頭像等,而非一經(jīng)渲染就恒定不變的,例如等??焖僬业竭m合自己的海報(bào),快速集成可擴(kuò)展高性能的海報(bào)渲染功能。 poster-generater ???海報(bào)生成器. 只需要一個(gè)簡(jiǎn)單的 json 配置即可生成你需要的海報(bào)... 說(shuō)明 此項(xiàng)目誕生有一段時(shí)間了,我本人也一直在使用這個(gè)程序,從一開(kāi)始的 g...

    hearaway 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<