SpaceX-API源碼剖析(一)- 介紹

2021-02-15 薯條的博客
01-Background

SpaceX-API開源已久,  一度想要好好寫一篇關於它的源碼剖析文章, 可拖延症當頭, 一直未能動筆. 趁著一年之始, 好好寫一篇學習文章, 就當作2021年一個好的開頭吧.

02-Project-Introduction

開始讀SpaceX-API之前, 讓我們先簡單了解一下SpaceX是什麼? SpaceX-API又是什麼?

SpaceX是一家傳奇的民營航天製造商. 伴隨隨著它旗下的獵鷹系列火箭在2018年將特斯拉送入太空而一舉成名. 其高性能可回收低成本特性在當時震驚了整個業界. SpaceX的多項第一預示著它達成了很多國家航天機構未能達成的成就. 而它除了民營這個特殊標籤外, 還有一個特殊標籤——它是第一個以軟體工程開發方式來開發火箭的航天機構.SpaceX-API即是它軟體工程下的一個產物.

SpaceX-API是用來控制SpaceX下火箭,核心艙,太空艙,發射臺和發射信息的後臺程序. 它基於Nodejs的koa框架,  採用Rest API結構, 加上Redis和MongoDB 做數據緩存與存儲來實現火箭各模塊之間的核心交互. 它的代碼整體來說是比較優雅乾淨的, 並且由於是較新的項目, 也符合現代Nodejs的風格, 很少會有以前JS上的一些編程陋習和包袱. SpaceX-API在去年6月剛開源的時候成功火爆了nodejs社區, 並登頂github熱榜.

03-Dependence-Introduction輔助編程類

blake3: hash生成器

cheerio: 移除dom和瀏覽器相關部分的jQuery, 可以比較方便的處理html標籤及其內容

cron:  schedule job, 相比於原生的node timer有以下三點優勢 1.接受的時間種類更廣 2.支持創建child_process來做定時任務

fuzzball: 字符串模糊查找

lodash:  編程實用工具庫

moment-range: 時間範圍上的工具庫, 比如判斷合併兩個時間段或者判斷某個時間是否在指定時間範圍內等等.SpaceX這裡用來通過比較數據的時間做數據版本的管理

moment-timezone:  時區

tle.js: 處理衛星經緯度相關的庫

    b.Io類

got: http request庫

tough-cookie: http cookie的set/get

pino:  日誌庫. (除此之外還有一些比較常見的日誌庫morgan, winston, log4js, bunyun, 各有優劣, 展開不述, 相關差別可見: https://zhuanlan.zhihu.com/p/85815779)

ioredis: redis中間件

mongoose: mongodb中間件

mongoose-id: 用id替換mongodb中的_id的mongoose插件

mongoose-paginate-v2:  用於mongo數據分頁的mongoose插件, 直接在查詢本身時改變返回值鍵而不用做額外處理

    c.Koa類

koa: koa框架核心

koa-bodyparser: koa對於http request body部分的解析模塊

koa-conditional-get:  可以配合koa-etag使用, 條件式請求, 常見實現有 Last-Modified 和 ETag

koa-etag: koa etag模塊, 用於檢查http請求的resource版本, 提高緩存效率

koa-helmet: 字面意思, 給http加一個頭盔. 即使用一些http header來保護這個koa應用

koa-router: koa路由模塊

koa2-cors:  處理跨域問題

koa-pino-logger: koa的pino官方插件, 這裡會根據環境來選擇使用koa-pino-logger還是pino, 沒有本質區別

未完待續, 下一章將講述SpaceX-API的項目結構~

(小小的吐槽一下, 公眾號裡面的排版有點憨憨,不支持markdown = =/)

相關焦點

  • 俯瞰Dubbo全局,閱讀源碼前必須掌握這些!!
    好了,對於Dubbo的核心角色我們就介紹到這兒,更多的信息,小夥伴們可以參見Dubbo的官方文檔。搭建Dubbo源碼環境我們可以使用如下命令將github的源碼下載的本地。接下來,我們就對Dubbo源碼中的核心模塊進行簡單的介紹。
  • 史上最全SpaceX火箭數據開源!
    △clients詳細列表怎麼拿到信息呢?以Python為例:import requestsurl = "https://api.spacexdata.com/v3/history"payload = {}files = {}headers= {}response = requests.request("GET", url, headers=headers,
  • 史上最全SpaceX火箭數據開源,核心、組員艙、起落架、發射信息全都有!
    △clients詳細列表怎麼拿到信息呢?以Python為例:import requestsurl = "https://api.spacexdata.com/v3/history"payload = {}files = {}headers= {}response = requests.request("GET", url, headers=headers,
  • Python3調用新浪微博API抓取數據
    本文介紹基於Python3+通過調用新浪微博API方式採集用戶信息的案例。在高級信息中,點擊OAuth2.0,選擇編輯項均填入:https://api.weibo.com/oauth2/default.html3.編寫程序啟動Spyder,隨後將測試代碼粘貼進來。
  • 手把手教你學Numpy——常用API合集
    基本統計方法在日常的工作當中,我們經常需要通過一系列值來了解特徵的分布情況。比較常用的有均值、方差、標準差、百分位數等等。前面幾個都比較好理解,簡單介紹一下這個百分位數,它是指將元素從小到大排列之後,排在第x%位上的值。我們一般常用的是25%,50%和75%這三個值,通過這幾個值,我們很容易對於整個特徵的分布有一個大概的了解。
  • 基於Django和翻譯API實現web版的中英文對照翻譯(一)
    筆記經常需要翻譯一些英文文檔,但是試用了一些商業軟體之後,一來覺得滿足不了自己的翻譯習慣,二來也是覺得對於個人來說,使用需要的收費的東西總是會有些顧忌。一番了解之後,決定選用谷歌翻譯/搜狗翻譯/有道翻譯官方提供的翻譯api自己實現一個web版的翻譯界面。目前搜狗翻譯/有道翻譯都已經開始收費,但收費的標準還可以讓人接受,以搜狗翻譯為例,現價:40.00/百萬字符。還是可以接受的。閒言少敘。直入正題。
  • Azure 靜態 web 應用集成 Azure 函數 API
    但是一個真正的web應用,總是免不了需要後臺api服務為前端提供數據或者處理數據的能力。同樣前面我們也介紹了Azure函數服務,Azure函數的http trigger可以對http作出響應,可以完美的承當web api的角色。現在Azure靜態web應用可以直接集成Azure函數,使得一次發布可以同時發布前端項目(vue、blazor)及後臺api服務(azure函數)。
  • Rocket-API 2.3.2 發布,基於 spring boot 的 API 敏捷開發框架
    功能新增或修改: 遠程部署重複判斷 添加mongo對象操作函數 mapping路徑匹配修改,解決restful下路徑可能會匹配執行邏輯錯誤問題 增加配置項 駝峰轉換配置 spring.rocket-api.map-underscore-to-camel-case
  • PySpark源碼解析,用Python調用高效Scala接口,搞定大規模數據分析
    本文主要從源碼實現層面解析 PySpark 的實現原理,包括以下幾個方面:PySpark 的多進程架構;Python 端調用 Java、Scala 接口;Python Driver 端 RDD、SQL 接口;
  • SpringSecurity 默認表單登錄頁展示流程源碼
    涉及1.FilterSecurityInterceptor,2.ExceptionTranslationFilter ,3.DefaultLoginPageGeneratingFilter 過濾器,並且簡單介紹了
  • Restful Api-接口設計
    獲取資源 POST(CREATE)創建資源 PATCH(UPDATE)更新資源的部分屬性(很少用,一般用POST代替) PUT(UPDATE)更新資源,客戶端需要提供新建資源的所有屬性 DELETE(DELETE)刪除資源使用方式 GET http://www.birjemin.com/api
  • 直播帶貨app源碼用Java語言來開發有哪些好處?
    而直播帶貨APP源碼的開發十分的重要,且在目前來看,最常用的還是Java語言,那麼相比較於其他語言開發,Java語言的直播帶貨系統有什麼優勢呢?下面就由小編為大家介紹吧。 一、源碼獨立性 Java開發直播帶貨APP源碼可以給企業自主搭建的權利,無需通過第三方平臺交易,不再依賴第三方平臺的流量。
  • 5G時代,一對一直播源碼平臺與時俱進,直播與VR結合
    相比於傳統的圖文展現方式,商家藉助一對一直播源碼、短視頻等形式,用更直觀、互動性更強的方式喚起消費者的購物慾望。這一切,在即將到來的5G時代,或將帶來更大的商業機會。對於一對一直播源碼行業來說,5G不只是可以消除卡頓,也將進一步推動人工智慧、雲計算、IoT和VR技術走向成熟,同時也會大大提高運營和變現的效率,可以預見5G可能是直播行業的又一個風口
  • 直播系統源碼開發:關於安卓開發工具和obs直播推流
    隨著移動網際網路技術的不算發展,直播系統源碼不再局限於娛樂直播的範疇尤其對於今年來說,購物直播行業的迅速發展,對直播系統源碼開發的需求進一步擴大,同時對直播源碼開發技術也有了新的要求。
  • 超聲波測距原理(帶原理圖及源碼)
    超聲波發生器可以分為兩大類:一類是用電氣方式產生超聲波,一類是用機械方式產生超聲波(暫不介紹)。電氣方式包括壓電型、磁致伸縮型和電動型等;機械方式有加爾統笛、液哨和氣流旋笛等。它們所產生的超聲波的頻率、功率和聲波特性各不相同,因而用途也各不相同。
  • 使用C#的後端Web API:循序漸進教程
    本教程介紹如何使用C#(ASP.NET)構建自己的Web伺服器(Web API)。重要的是要注意,要託管您的伺服器,您將需要基於Windows的託管。先決條件我想我們可以開始了。注意routeTemplate: "api/{controller}/{id}",它解釋了API路由。現在,讓我們做一個基本的例子。在本教程中,我們將為用戶準備一個API,這是每個系統的一個非常通用的實體/對象。
  • 仿微信的IM聊天時間顯示格式(含iOS/Android/Web實現)[圖文+源碼]
    ,效果可媲美微信 [附件下載]》《高仿Android版手機QQ可拖拽未讀數小氣泡源碼 [附件下載]》《Android聊天界面源碼:實現了聊天氣泡、表情圖標(可翻頁) [附件下載]》《高仿Android版手機QQ首頁側滑菜單源碼 [附件下載]》《分享java AMR音頻文件合併源碼,全網最全》《Android版高仿微信聊天界面源碼
  • 新浪微博 API開發簡介之 Python篇
    於是照著寫了一個:# -*- coding: utf-8 -*-from weibopy.auth import OAuthHandlerfrom weibopy.api import APIconsumer_key= '應用的key'consumer_secret ='應用的App Secret'
  • api框架 web 最好的go_golang api框架 - CSDN
    我在安裝的過程中,gokpg卡住了,後來不得不根據gin裡的godep的文件,把響應的源碼從github上下載,然後copy到對應的目錄。關於golang的包管理和依賴,我們以後再討論。文件上傳上傳單個文件前面介紹了基本的發送數據,其中multipart/form-data轉用於文件上傳。gin文件上傳也很方便,和原生的net/http方法類似,不同在於gin把原生的request封裝到c.Request中了。