Express - Hello World! 今天就要來安裝主角之一的 Express 了! 一樣開啟虛擬機器我應該是可以不用多說了 XD 先確認自己的 node 是不是 NVM 的 node 喲 建立專案 $ cd /vagrant/ $ mkdir API $ cd API/ $ npm init 自己輸入專案的相關內容吧,不知道的就直接按 enter 空白丟給他~ 就會產生 package.json 了! 安裝 Express // 在專案目錄底下 (/vagrant/API/) $ npm install express -save 下 -save 的原因是要將 express 加入 package.json 中 離開虛擬機,其實我們也可以在虛擬機資料夾看到剛剛建立的專案了, 現在開始就可以使用自己喜歡的編輯器來開啟這個專案資料夾,我個人偏好使用 Sublime Text 要執行專案時再回終端機即可 Express Hello World! 在 API 資料夾中建立一個 app.js 內容是: javascript var express = require('express'); var app = express(); app.

Continue reading

NVM 與 NPM 使用 NVM - Node.js Version Manager 安裝 如果是 Ubuntu 的話必須先要有 build-essential 和 libssl-dev 套件 不過這個我們之前就裝過了,所以直接安裝 NVM 吧~ $ curl https://raw.githubusercontent.com/creationix/nvm/v0.17.2/install.sh | bash $ source ~/.bashrc 使用 NVM 安裝 node.js 先前我們有使用 Ubuntu 本身的 apt-get 安裝 Node.js 不過那是被安裝到 /usr/bin/node 有時候要安裝套件需要 sudo 提供管理者權限 非常麻煩,因此我們使用 NVM 來安裝另一個 Node.js 這個 Node.js 的執行檔就任我們使用,不需要提供管理者權限了 $ nvm install 0.10 nvm 就會安裝 0.10 版本,安裝完後就要使用它: $ nvm use 0.10 再來我們把 nvm 的 node.js 設定成預設的 node

Continue reading

Node.js - Hello World! 一樣先開虛擬機哦~ 並且開啟終端機連進 server 裡面~ 以下是 Node.js 官方網站的 web server 程式範例,我稍作小修改: var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(1337, '0.0.0.0'); console.log('Server running at http://0.0.0.0:1337/'); 我們先在虛擬機的資料夾建立一個子資料夾 ‘HelloWorld’ 在 HelloWorld 資料夾裡面建立一個 app.js 內容如上,存檔。 使用終端機進入 server : $ vagrant ssh $ cd /vagrant/HelloWorld $ node app.js 到瀏覽器輸入 http://192.168.33.10:1337/ (或者是你的 Vagrantfile 裡面設定的 private IP) 即可看到 Hello World 了! 要關掉 Server 也非常簡單,回到下指令的地方,按下 ctrl + c 即可中斷程式

Continue reading

昨天我們已經把一個全新乾淨的環境架起來了 這時候我們不希望因為日後的操作導致 Server 環境髒掉,又要重灌 因此我們今天就來練習一下如何使用 vagrant 打包環境! Vagrant 打包 一樣先進入虛擬機資料夾,先確保虛擬機沒有在運作: $ vagrant status Current machine states: default poweroff (virtualbox) The VM is powered off. To restart the VM, simply run `vagrant up` 如果是 poweroff 的話,就可以進行接下來的動作,如果是其他狀態的話,就先下關機指令囉 $ vagrant package ==> default: Clearing any previously set forwarded ports... ==> default: Exporting VM... ==> default: Compressing package to: /Users/.../ithome/package.box vagrant 就會在虛擬機器資料夾底下建立一個 package.box 這個檔案就是整個伺服器環境的檔案了! 假設今天想要讓團隊成員使用,只要他們都有 VirtualBox + Vagrant 的話, 就可以依循下面的指令步驟將你所做的 box 匯入並使用:

Continue reading

[Server 番外篇] 建立自己的本機虛擬伺服器 2 - Ubuntu 基本設定與安裝 Node.js, MongoDB 嗨又到了 Server 時間了! 接下來我們都會做一些指令操作, 如果進一步有興趣的可以 Google 鳥哥的私房菜, 完整的 Linux 操作教學,淺顯易懂,想學習操作 linux OS 的話必看! 今天我們要稍稍整理一下昨天剛安裝完的 Ubuntu 作業系統,以及安裝一些我們需要用到的東西 首先我們的第一步就是先開啟終端機,到昨天放 Vagrantfile 的資料夾: $ cd ~/ithome/ 開啟 Ubuntu $ vagrant up 順帶一提,有時候開機時可能會卡在一個地方: default: Warning: Connection timeout. Retrying... default: Warning: Connection timeout. Retrying... default: Warning: Connection timeout. Retrying... 這個就稍微等一下吧~ 如果電腦性能比較差的話可能會卡比較久,不過應該不至於會卡超過 10 分鐘 如果卡超過十分鐘可能要強制中斷,並且尋找解決辦法了~ 開機完成後就登入吧! $ vagrant ssh ... vagrant@vagrant-ubuntu-trusty-64:~$ Ubuntu 套件, 設定時區 今天就要來幫 Ubuntu 安裝一些東西,

Continue reading

VirtualBox 是一套虛擬軟體,可以方便幫助我們在現有的作業系統上 模擬另一個作業系統 (如 linux, Ubuntu, CentOS…) 在虛擬機器裡面所以的一切變動,都不會影響到現有的作業系統, 非常適合拿來做測試使用 由於現在大部份的 Service 除了架設在 Windows Server 外,最大宗的就是 *nix distribution 了 因此這在這個系列文中,也是一定要教大家如何建立起虛擬測試機器, 來模擬真實 Server 環境中,如何架設自己撰寫的 API Service VirtualBox 到 VirtualBox 官方網站下載合適的安裝檔案吧! 安裝完成就可以了! 因為我們接下來會使用 Vagrant 這套 commaond line tool 來對 VirtualBox 進行操作 因此只要安裝完 VirtualBox 後就可以不用管他了 XD Vagrant Vagrant 它可以幫助我們快速的建立一個輕量、可重複使用、並且可以打包起來帶著走的環境 透過編輯一個設定檔,就可以簡單設定該虛擬系統的 *nix 基本設定,如 共享資料夾、網路存取等等, 不需要透過 VirtualBox 通常這套軟體可以應用在團隊開發上: 以網頁開發來說,如果大家的測試環境與版本都不太一樣,例如 apache 或 php 版本不同 有時候會造成團隊溝通的負擔,因此透過 Vagrant 將 server 環境重新建立一套虛擬機器, 並且透過 Vagrant 打包,就可以丟給其他人使用,這樣一來大家的環境都一樣, 就可以避免這個問題, 而且還有一點,Server 的安裝是很累人的,同樣的事情基本上都不會想做第二遍, 因此打包一個乾淨的環境後備份,弄髒了可以隨時快速再把備份拿出來用,非常方便! 安裝: 到 下載頁面 尋找適合自己的下載並且安裝

Continue reading

使用技術與工具介紹及原因 終於要開始進入正題了! 在了解 REST/RESTful 後, 就要從無到有 - 從 Server 到 API endpoint 都由自己打造 今天會先來說明接下來會使用到哪些工具及技術 由於筆者使用 Mac ,因此若是有其他平台的使用者可能需要自行找教學 Server - Ubuntu with Vagrant + VitrualBox 接下來幾天會先從這個部分開始提起 我們會使用 VirtualBox + Vagrant 的方式來建立自己的虛擬環境 避免一些讀者可能對 Server command line 不熟 這個部分是大家可以跳過的部分,但是我還是會從無到有架起來 Backend Language - Node.js 後端語言使用了 Node.js,其實本來有考慮使用 Golang, 但顧及自己的時間… 還是使用 Node.js,方便快速 這幾年是 Javascript 的時代, 優勝美地似乎也可以支援使用 Javascript 撰寫 Automation Tool 從前端打到後端甚至到 DB 都可以使用到 Javascript , 是該來看看 Javascript 的語法特性了 :D 而且 Node.js Event-driven 的特性,可以利用少少的資源提供高效能的服務 同時搭配易用性及社群活躍度,這是我選擇 Node.js 而非選擇 Golang 的原因

Continue reading

使用時機與實際 API 參考 什麼時候需要打造 RESTful API? 看看別人的 RESTful API (Instagram/Twitter) 什麼時候需要打造 RESTful API? 我認為當有數組資源要被多種不同平台使用時,就需要打造 RESTful API 例如,有 Android/ iOS / Web 要對同一 table 做存取時, 假設有個 MySQL DB,各個平台都使用各自的 mysql-driver 來直接操作 DB 假設有個 A 專案建立了一套書籍管理系統,資料庫裡記錄了大大小小的書籍, 而有個新的 B 專案需要使用到書籍的資料,此時 DB 操作的程式碼只能再寫一遍, 且各個平台重新撰寫,似乎是不大靠譜。 撰寫 RESTful API 的好處之一即是 RESTful 使用 HTTP 協定, 各個平台皆支援,不需要太複雜的程式,只需要使用各個平台的 http-client, 各個平台也不需要了解 DB 操作語法,只需要知道 json, xml 習慣的資料格式, 且開發 API 還能夠對各個資源輕易地上 cache 增進反應速度, 開發 RESTful API 好處多多,哪天想 Open API 也就不需要再多作處理了~ 接著讓我們來看看兩個有名網站的 API 吧!

Continue reading

Representational State Transfer,簡稱 REST, 它是一種網路架構風格,他並不是一種標準。 而 RESTful 可以這樣子想像: 美麗 (Beauty) 的事物可以稱為 Beautiful 設計為 REST 的系統就可以稱為 RESTful 以 API 而言,假設我們正在撰寫一組待辦事項的 API, 可能會有以下方式來作為 API 的 interface: 獲取使用者資料 /getAllUsers 獲取使用者資料 /getUser/1 新增使用者資料 /createUser 更新使用者資料 /updateUser/1 刪除使用者資料 /deleteUser/1 若是以 REST 風格來開發 RESTful API 的話: 獲取使用者資料 /GET /users 獲取使用者資料 /GET /user/1 新增使用者資料 /POST /user 更新使用者資料 /PUT /user/1 刪除使用者資料 /DELETE /user/1 兩者差異是在於 RESTful API 充分地使用了 HTTP protocol (GET/POST/PUT/DELETE), 達到 1. 以直觀簡潔的資源 URI 2. 並且善用 HTTP Verb

Continue reading

承上篇, RESTful 的優點如下所列: 1. 瀏覽器即可以作為 client 端 2. 可以更高效地利用 cache 來達到更快的回應速度 3. 界面與資料分離 4. 節省伺服器的計算資源 5. 可重用! web/android/ios 都可以用, 無痛轉換! RESTful 的要求: 1. client - server 架構 2. 分層系統 3. 利用快取機制增加效能 server-side: 在 GET 資源時,若該資源並沒有被變更,就可以利用 cache 機制減少 query,並且加快回應速度 client-side: 透過 client 端 cache 記錄 cache 版本, 若向 server 要求資源時發現 server 最新版與 cache 相同, 則 client 端直接取用本地資源即可,不需要再做一次查詢 省機器運算及流量 = 省錢 4. 通訊協定具有無狀態性 不能讓兩隻 API 做同一個動作! 假設完成轉賬手續必須先 call A 再 call B 的話, 若做完 A 後斷線導致 B 無法執行,後續要處理 A -> B 的方式會很麻煩 且不應該假設伺服器知道目前的狀態!

Continue reading

Author's picture

kerkerj

Cat lover <3

Backend Engineer

Taiwan