Full Stack Engineer修煉日記

Full Stack Engineer修煉日記 這是我的Full Stack修煉日記,一起進步

最近在網上衝浪時看到一個叫做MERN的技術架構名詞,我在這邊做個筆記,希望未來能多多熟悉這些全端開發技能。MERN,是一個全端(前端+後端)架構其中MongoDB — document database(資料庫)Express(.js) —...
15/04/2024

最近在網上衝浪時看到一個叫做MERN的技術架構名詞,我在這邊做個筆記,希望未來能多多熟悉這些全端開發技能。
MERN,是一個全端(前端+後端)架構
其中
MongoDB — document database(資料庫)
Express(.js) — Node.js web framework(伺服器框架)
React(.js) — a client-side JavaScript framework(前端框架)
Node(.js) — the premier JavaScript web server(後端伺服器)
這個架構的好處就是MongoDB非關聯式資料庫很好上手還有全部程式用JS就可搞定,所以CP值非常高,雖然還是需要熟習不同框架的用法但學習曲線對新手而言算是比較友好的。

今天想來和大家介紹Kubenetes和docker的差別,我之前對這些技術一知半解,只知道docker和kubernetes都是container相關技術,但他們到底在做甚麼卻不甚了解。首先來說dockerdocker是一個實作輕量級的作業...
15/04/2024

今天想來和大家介紹Kubenetes和docker的差別,我之前對這些技術一知半解,只知道docker和kubernetes都是container相關技術,但他們到底在做甚麼卻不甚了解。
首先來說docker

docker是一個實作輕量級的作業系統虛擬化開源解決方案。 Docker 的基礎是 Linux 容器(LXC)等技術。

在 LXC 的基礎上 Docker 進行了進一步的封裝,讓使用者不需要去關心容器的管理,使得操作更為簡便。使用者操作 Docker 的容器就像操作一個快速輕量級的虛擬機一樣簡單。
一般的VM會包含OS,使檔案大小過於龐大,但docker engine會基於guest OS將applications還有dependencies進行包裝,使檔案更小,執行更加快速且容易管理。
為甚麼要用docker,就說說我自己真實經歷的狀況吧,我之前在開發專案時,很認真的python每個package標上版本存成requirements.txt,想說其他開發者只要按一下pip install -r requirements.txt就可以快速地把packages下載下來,但卻忽略了不同作業系統以及不同使用者開發環境,因此別人在協作專案時,光是下載dependencies就會花上半天時間,但使用docker後別人運行你的專案就非常輕鬆了。

Kubernetes(K8S)是一個可以幫助我們管理微服務(microservices)的系統,他可以自動化地部署及管理多台機器上的多個容器(Container)。

更進一步地說,Kubernetes 想解決的問題是:「手動部署多個容器到多台機器上並監測管理這些容器的狀態非常麻煩。」而 Kubernetes 要提供的解法: 提供一個平台以較高層次的抽象化去自動化操作與管理容器們。

由此可知K8S和Docker其實是可以一起使用的,Docker可以幫助我們更快的包裝App,而K8S則可以管理這些Dockers
我還沒有用過K8S,我之後用過後再出一篇文章和大家分享我的體驗。

URL VS. URI VS. URN我們首先來看最常見的URL與URI的區別URL 全名 Universal Resource LocatorURI 全名 Universal Resource IdentifierURI是一串在網路上找尋...
09/04/2024

URL VS. URI VS. URN

我們首先來看最常見的URL與URI的區別
URL 全名 Universal Resource Locator
URI 全名 Universal Resource Identifier

URI是一串在網路上找尋資源的字串,注意所謂locator代表URI不一定是個domain,也可以是一張圖片或文件。URI包含URL與URN。

他們之間的差別在於有沒有包含協議,URL是一定要包含協議的,像是https://example.com,而URI則不一定要包含協議(example.com)。
也就是說URL是URI的一個subtype,而所有URLs都屬於URIs,但URIs不一定是URLs。

通常若有包含"http://",我們都會稱做URL,因為這樣更加具體。
("ftp://","smb://"也屬於協議的一種,所以不一定要http協議才可以抽做URL)

那URN又是甚麼呢?
URN全名Uniform Resource Name
URN也是URI的subtype,URN和URL的差別就像是英文的"what"和"where",URN用特定命名空間的名字標識資源,讓我們可以在不知道其網路位置及訪問方式的情況下討論資源。
URN總是以"urn:"開頭,但"urn: "不是一個合法的網路協議,所以用瀏覽器網址搜索不到。

一些例子
URL: ftp://ftp.is.co.za/rfc/rfc1808.txt
URL: http://www.ietf.org/rfc/rfc2396.txt
URL: ldap://[2001:db8::7]/c=GB?objectClass?one
URL: [email protected]
URL: news:comp.infosystems.www.servers.unix
URL: telnet://192.0.2.16:80/
URL: tel:1-800-555-5555
URN (not URL): urn:oasis:names:specification:docbook:dtd:xml:4.1.2
URN (not URL): urn:isbn:0451450523

接下來跟大家介紹六個常見的API架構、方法、協議1. SOAP(Simple Object Access Protocol)這是一項較舊也相對較成熟的API協議,由W3C(全球資訊網協會)提出與維護,可以讓不同程式語言或OS的程式進行溝通。...
20/03/2024

接下來跟大家介紹六個常見的API架構、方法、協議
1. SOAP(Simple Object Access Protocol)
這是一項較舊也相對較成熟的API協議,由W3C(全球資訊網協會)提出與維護,可以讓不同程式語言或OS的程式進行溝通。
傳送到SOAP API的Application Layer Protocal可以是HTTP (for瀏覽器), SMTP (for email), TCP等等,但回傳的資料格式必須是XML格式(一個人類、機器都可讀的標記語言)。
因為SOAP是一個Protocal,所以有較多複雜與冗長的規要遵守,它可能會增加軟體的載入時間與開發週期,也代表SOAP不適合用於輕量的專案開發。因其具有較高的安全性,故通常用於銀行業處理金錢交易相關服務。

2. RESTful API (Representational State Transfer API)
RESTful是目前最流行的API設計方法,它並非是一項協議,而是一套架構原則,用於輕量化的網站服務或是手機應用。當今許多網站都依照RESTful來設計API,像是Youtube、X。當RESTful API收到HTTP請求時, API可以以HTML, XML, plain text, JSON資料格式進行回傳。開發者通常偏好用JSON(一種儲存訊息且機器和人類都可讀的檔案類型)進行回傳,除了因為它可以被任何程式語言進行讀取,JSON輕量化的特性也受到大家喜愛。但RESTful不適用於需要及時資料傳輸的服務。
遵守以下準則設計的API會被稱作RESTful API:
(1) Stateless
每個request應該要包含了解及執行request的必要資訊,server不會在requests間儲存client的狀態,session資料會被儲存在client,
(2) Client-Server architecture
client和server是兩個獨立的個體,通過網路進行溝通。client負責UI與UX設計,而server端負責商業邏輯的實現與數據存儲。
(3) Cacheable
server給出的responses應該是可以被client快取的,可以用於節省server負擔。
(4) Layered System
階層式系統可以讓不同layer擔任不同的角色,有利於system design的可擴展性。

3. GraphQL
GraphQL不只是一種API架構,也是一種Query Language,允許Client項資料庫請求特定資料,可以避免over-fetching(每次request拿太多資料,導致效能的浪費)與under-fetching(每次endpoint拿不完所有資料,需要再call第二次endpoint)。GraphQL 可以讓client-server間通訊變得更加高效,它是由Facebook所開發,因為Facebook每天需要服務上百萬的用戶,所以高效能的API對其而言非常重要。GraphQL也被Shopify、Github所採用。

4. gRPC
gRPC是一種現代且高效能的API架構,由Google在2015年所提出,使用http/2所以比一般http/1.1更快速,此外其使用Protocal Buffer作為介面定義語言(interface definition language, IDL),因此在開發上可以更快速的在不同的語言、服務上互動。有別於一般open api使用url、http methods、參數等在client與server間互動,gRPC的IDL則更為直觀明確,"client與server端皆須使用同一份 .proto 檔案作為介面"。很多公司打造微服務(microservice)架構會使用gRPC。Netflix就使用gRPC作為server間溝通的方式,以應付它們巨量的流量傳輸。gRPC對瀏覽器的支援較少,故不適合獨立開發者用它來作為web programming 的API架構。

5. WebSocket
WebSocket是一種基於 TCP 的全雙工網路傳輸協定。此技術被廣泛運用在視訊通話、多人線上遊戲,這些應用通常要求低延遲且即時的資料傳輸。
早期的推播技術、訊息即時更新技術,都是使用 輪詢(polling)的方式,但這種作法會需要大量的請求和回覆,造成同樣的標頭(header) 重複使用,而且用的是很肥的 HTTP 標頭,實際傳輸的內容大小可能比標頭還小,因此這種作法會佔據大量傳輸資源(尤其是需要短時間不斷更新的功能),於是 WebScocket 技術就誕生了。
在 WebSocket 技術中,Server 和 Client 之間會先透過 HTTP 協定 握手(handshake)建立一個 TCP 通道(類似從 server 拉水管到 client),之後傳輸訊息就可以直接透過通道,而不必再使用 HTTP 協定的標頭,而且他是全雙工,所以 Server 可以主動向 Client 傳輸資料。
WebSocket 使用的具體過程為,Client 先和 Server 發起連線,當成功連線後 Client 可以訂閱(subscribe) 代理(broker),當 Server 發送訊息到代理時,有該代理會將訊息傳給有訂閱的 Client。在建立連線時,Client 會有特定的 Session 被 Server 儲存,所以 Server 能透過這些 Session 來確定各個連接的 Client 是誰,也就能做到指定對象的傳輸。

6. Webhook
webhook暱稱叫做reverse APIs or push APIs,但它並不是一個API,它是一個HTTP-based且由event所驅動的的callback function,它非常的輕量化,可用於兩個API間的通訊。
在傳統的web server設計中,,假設專案A想要獲取專案B的資料,通常B需要提供一個API,然後A去請求B的API,從而獲得資料,這樣的過程我們稱之為"拉"data。
假設今天A需要實時獲取到B的最新資料,在傳統做法中,我們需要不停的去向B做Poll(輪詢)操作,以便獲取到最新數據,但這樣的效率和性能都非常低下,通過webhook機制來設計,可以讓A提供一個webhook url,每次B新增資料(看做一個event)時,便會向A的hook地址進行請求,A收到B的請求,然後對數據進行處理。比較有名的line bot、GitOps便是使用webhook技術。
這個網址有webhook更完整的介紹:
https://www.redhat.com/en/topics/automation/what-is-a-webhook

今天想跟大家介紹什麼是API、為什麼要使用API。API全名為Application Programming Interface,是一套工具、定義與協定,用於融入應用軟體與服務,API在生活中其實很常見,例如我們透過手機APP查詢天氣,此時...
12/03/2024

今天想跟大家介紹什麼是API、為什麼要使用API。

API全名為Application Programming Interface,是一套工具、定義與協定,用於融入應用軟體與服務,API在生活中其實很常見,例如我們透過手機APP查詢天氣,此時手機就會透過API向後端系統發送請求,得到資料後再渲染在頁面上給我們看到。

為什麼要使用API呢,因為查詢天氣這個API程式可能早就被很多人寫好了,不同的應用程式頁面可以呼叫同個API程式,符合DRY(Don't Repeat Yourself)的設計原則,讓程式設計師可以用心研發自家APP的UI(User Interface)與UX(User Experience)。API也可以讓工程師內部更好的進行分工合作,一個應用程式通常有需多功能,可能需要許多不同的API,例如登入功能、文章發布功能等等,後端工程師可以專注於開發特定功能API,開發好後讓前端工程師來引用。

以Apple手機上的天氣APP為例,Apple肯定不可能為了這個APP在各國設立氣象監測站,因此Apple的工程師可以透過串接世界各地氣象監測站所提供氣候資料API接口,來提供天氣資訊(台灣地區沒有採用中央氣象局的天氣資料,所以有時候Apple Weather會沒有中央氣象局的天氣APP來得準XD)

API 有只開放給公司內部使用的也有開放給公眾使用的,API可能是為了實現某項軟體的功能而被開發,這時候它可能只會開放給指定伺服器進行呼叫,也有一些API是公司開放給公眾使用的,像是台北捷運就有開放捷運資料的API讓開發者串接,獲取捷運的資料更加方便。

自從ChatGPT的興起,很多AI服務進入了大眾的視野,這些AI服務可能需要較強大的算力支持,一般人較難進行開發與部屬,我們可以透過那些公司提供的API來將AI功能加入我們的專案,只需要按照指定格式傳送請求便可快速獲得AI response,但通常這些API都是要收費的。

Address

Taipei

Website

Alerts

Be the first to know and let us send you an email when Full Stack Engineer修煉日記 posts news and promotions. Your email address will not be used for any other purpose, and you can unsubscribe at any time.

Share