發表文章

目前顯示的是有「RESTful」標籤的文章

[RESTful] Java Servlet API Server ~3 (JSON format 與 library)

圖片
在上一篇文章中, 我們介紹了 Servlet 架構下的編譯環境, 並以範例說明如何產生一個網頁回應. 然而, 對於 RESTful API 而言, 另一個主要的需求即是作為 API 介面, API 的全稱為: Application Programming Interface, 主要的用途就是提供一個介面, 讓不同應用程式透過網路溝通, 簡單來說, 像是一個服務的窗口, 並定義該窗口對應的功能與服務. 另一方面, JSON 則是一種資料封裝格式, 可以把資料以 key-value 的方式, 組成 JSON 物件, 進行傳送. 來自:  https://docs.aws.amazon.com/zh_tw/sdk-for-javascript/v2/developer-guide/working-with-json.html 為了利用 Servlet 提供 JSON 的解析與回應, 我們需要章中, 我們介紹了 Servlet 架構下的編譯環境, 並以範例說明如何產生一個網頁回應. 然而, 對於 RESTful API 而言, 另一個主要的需求即是作為 API 介面, API 的全稱為: Application Programming Interface, 主要的用途就是提供一個介面, 讓不同應用程式透過網路溝通, 簡單來說, 像是一個服務的窗口, 並定義該窗口對應的功能與服務. 另一方面, JSON 則是一種資料封裝格式, 可以把資料以 key-value 的方式, 組成 JSON 物件, 進行傳送. 為了利用 Servlet 提供 JSON 的解析與回應, 我們需要 import org.json.*; 做為參考的 library, 範例程式可以參考:  https://blog.csdn.net/CapMiachael/article/details/72930357 import java.io.BufferedReader;  import java.io.IOException;  import java.io.PrintWriter;  import javax.servlet.ServletException;  import javax.servlet.http.HttpS...

[RESTful] Java Servlet API Server ~2 (helloworld)

圖片
在 上一篇文章 中, 我們建立了 Servlet 的編譯環境, 接著, 我們就從最簡單的 helloworld 開始, 介紹如何撰寫第一支 Servlet 程式. 以下是編譯環境中的路徑: 網頁根目錄: /var/lib/tomcat8/webapps/ROOT/ tomcat8 library 目錄: /usr/share/tomcat8/lib/ tomcat8 log 目錄: /var/lib/tomcat8/logs/ 首先, 我們要先定義 Servlet API 的入口, 此文件位於: /var/lib/tomcat8/webapps/ROOT/WEB-INF/web.xml 我們將內容填入如下: <web-app> <servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>HelloWorld</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/HelloWorld</url-pattern> </servlet-mapping> </web-app> 在文件中, 定義了 API 的路徑 ( servlet-mapping ) 以及對應的 Servlet 程式 ( servlet ), 透過這兩個設定, 我們就建立了 Servlet 與 API Server 之間的呼叫關係, 接著, 我們進行 helloworld 的 Servlet 程式撰寫, 以下為範例: import java.io.*;  import javax.servlet.ServletException;  import javax.servlet.http.*;  public class HelloWorld extends HttpServlet  {       static ...

[RESTful] Java Servlet API Server ~1 (Servlet 介紹與 tomcat8)

圖片
在 之前的文章 中, 介紹了如何用 node.js 快速建立 API Server,  然而, 由於效率問題, node.js 並不是一個穩定的架構用以作為 API Server, 同時, JSON Server 本身實作的架構, 依賴對檔案的讀寫, 對於大量存取的 API 實作來說, 容易造成 IO 的消耗, 考慮到上述因素, 我們便開始研究其他 API Server 的實作方式, 在本篇介紹中, 便以 Java Servlet + tomcat8 作為實作的平台. 關於 Java Servlet 是 Java 語言中的一種特殊類別, 用 Java 編寫的伺服器端程式, 可以透過與使用者的互動, 動態產生網頁, 對於 API Server 來說, 主要的功能則是繼承自: javax.servlet.http.HttpServlet 另一方面, tomcat 則是一開源的 HTTP 伺服器, 支援 Servlet 與 JSP, 在我們的實作中, 我們使用 ubuntu 16.04 作為基礎的作業系統, 並使用 tomcat8 作為網頁伺服器 (參考: 此文 ). 安裝 tomcat8 的開發環境: sudo apt-get install tomcat8 sudo apt-get install tomcat8-docs tomcat8-examples tomcat8-admin tomcat8 的開啟/關閉/重啟: systemctl start tomcat8 systemctl stop tomcat8 systemctl restart tomcat8 安裝好 tomcat8 之後, 會使用預設的服務埠 (8080), 連入: http://127.0.0.1:8080 之後, 我們可以看到下方頁面: 其中, 紅框處為網頁目錄的位置,  此目錄也是我們之後開發 Servlet 程式的相對根目錄, 藍框處標明了套件安裝的路徑, 其中, 這兩個路徑我們之後都還會用到, /usr/share/tomcat8/lib/ 有用以 compile 的 library, /var/lib/tomcat8/logs/ 則保存紀錄檔, tomcat8-examples 則提供一些 Servlet 的範例程式, 可以參考. 我們在此整理一下開發環境...

[REST] callback function in node.js

圖片
不太確定放在此類別是否正確, 不過, 之前 node.js 的程式碼都歸於此類別, 也就先暫時這樣分類吧... 主要參考的內容如下: http://larry850806.github.io/2016/06/16/nodejs-async/ https://www.tutorialspoint.com/nodejs/nodejs_callbacks_concept.htm node.js 為平行化 (非同步) 架構, 因此, 當我們執行一個 function 時, 會先放入 event loop 中, 並在背景繼續執行其他程式流程, 如下圖所示: https://blog.outsource.com/2018/09/26/understanding-the-event-loop-in-node-js-outsource/ 此平行化架構, 不同於 c / java 按程式一行一行執行的架構, node.js 可允許同時執行多項程式, 有利於利用多執行緒處理, 然而, 當一個程式需要另一個程式的結果時, 就需要 callback 來完成. 舉例來說: var fs = require('fs'); // fs.readFile(filename, callback(err, content)) fs.readFile('test.txt', function(err, content) {     var str = content.toString();     console.log(str.length);     console.log('finish'); }); console.log('not finish'); 此程式目的為讀一個檔案 (test.txt) 並顯示長度, 紅字部分為 callback 部分, 在這部分的程式將等到 readFile 執行完之後才會執行, 執行結果如下: $ node callback.js not finish 245 finish 我們可以看到先出現: not finish, 來自於最後一行的程式: console.log('not finish')...

[REST] REST API 的 client 程式開發 (node-rest-client)

圖片
在之前的 文章 中, 我們介紹了如何建立一個 json-server, 通常, 這樣的架構是為了作為 RESTful API 的介面, 在文章的安裝步驟中, 事實上, 有暗示此 JSON server 是以 NodeJs 的架構撰寫, 考慮到 NodeJS 對網頁端的支援, 也的確是一個合適的選擇. 傳送到 json-server 的資訊將被放到一個 .json 文件中暫存, 然而, 考慮到 json-server 並非設計作為資料庫使用, 當暫存資料過大時, 就會讓讀取/寫入失去效率, 因此, 我們需要寫一隻程式, 從 json-server 中取值, 處理, 再刪除數值, 架構如下圖所示: 資料處理的架構 當然, 更好一點的架構是直接用 NodeJs 來架設 REST API Server, 但考慮到平台的熟悉程度, 還是先用寫好的套裝程式來改, 應該比較穩定一些, 雖然犧牲不少效率... 在實作範例中, 我們使用 node-rest-client 作為開發套件, node-rest-client 建立在 NodeJs 之上, 可以參考: https://www.npmjs.com/package/node-rest-client 在其官網上, 有許多範例, 因此就不再多述如何安裝 node-rest-client, 以及每一個 REST 函數的呼叫, 在進入程式之前, 只提醒兩件事情: NodeJs 有原生的平行化架構, 因此, 當使用多個 client 時, 要注意每個 client 的執行並不會依照程式的順序. 相同的, 由於平行化架構, global variable 的存取順序可能和預期不同, 要自己想好順序, 並包在同一個 client 中. 因此, 本程式的目標流程有以下三個: 讀取 json 總數 => 取出最後一個 json 物件 => 刪除最後一個 json 物件 以下是所實作的程式: var Client = require('node-rest-client').Client; var client = new Client(); // get the number of json object // refer to the ...

[REST] 網頁開發環境: LAMP + WordPress

圖片
為了建立一個簡單的網頁介面, 我們在 Linux (ubuntu 16.04) 上建立一個標準的網頁開發環境, 也就是所謂的 LAMP: Linux, Apache, MySQL, PHP 這部分滿簡單的, 可以參考:  https://jerrynest.io/ubuntu16-04-wordpress/ 只需要輸入以下指令: sudo apt-get update sudo apt-get upgrade sudo apt-get install lamp-server^ sudo apt-get install phpmyadmin 其中, phpmyadmin 為一個可以透過 php 讀取 mySQL 的介面, 完成安裝之後, 記得把 php 網頁專案放到 /var/www/html/ 底下, 確保外部的存取, 指令如下: cd /var/www ln -s /usr/share/phpmyadmin 完成後, 可以透過 http://yourip:port/phpmyadmin 來查看 mySQL 的設定, 進入網頁後, 帳號為 root, 密碼為安裝 mySQL 時輸入的密碼, 就可以利用圖形化介面操作 mySQL, 接下來, 要建立一個動態網頁的環境, 在動態網頁的架構下, 通常我們將網頁分成三部分: 框架 (html), 排版 (css), 計算 (php), WordPress 是一個基於 PHP 技術的網頁模板, 並提供大量的模板參考, 在參考的文章中, 使用 apt-get 的方式來安裝 WordPress, 但在實測環境中, 因為不是純粹的 localhost 環境, 並透過 NAT 進行 port-to-port 的對應, 因此無法直接套用生成的 config 檔. 因此, 我們參考 WordPress 的教學, 直接對環境進行設定. 教學來自:  https://codex.wordpress.org/Installing_WordPress 此教學分成 5 個部分, 下載 WordPress: wget https://wordpress.org/latest.tar.gz 設置資料庫 (帳...

[REST] 利用 postman 建立測試環境

圖片
此 db.json 文件中, 定義了三種不同的 JSON 資源: posts, comments, profile, 並定義每一種資源的內容, 以 posts 為例, 就是: id, title, author, 要去存取此 JSON 資源最簡單的方式, 就是透過 URL, 但也有一些方便的工具, 例如: postman, 可以讓我們快速開發, 以下為操作範例, 首先, 我們先測試 POST (開立一個新的 JSON 項目), 首先, 我們要先輸入 JSON Server 的位址與對應的 JSON 資源 (http://localhost:3000/posts) 接著, 到 Body 的部分填入數值, 選擇 x-www-form-urlencoded 的格式, 按照定義, 我們在 posts 資源中, 有 title, author 兩個項目, 填入對應數值, 接著, 回到 Params 的項目, 輸入 id 也就是主要的查詢鍵 (key), 在這裡 id 的數值會自動是 posts 中最低數值加一, 在下方的視窗中, 我們就可以看到產生出來的 JSON 格式, 按下送出後, 也可以看到來自 JSON Server 的回應: 201 Created 從此回應也可以用來確認是否程式有問題. 所輸入的資料也就會保存在 db.json 這個文字檔中, 我們可以在 JSON Server 上透過 vim 打開 db.json, 可以看到多出來的一個條目: "posts": [ { "id": 1, "title": "json-server", "author": "typicode" }, { "id": 2, "title": "newline", "author": "jxk" }, { "title": "xxx", ...

[REST] JSON 格式和 RESTful API

圖片
在建立一個簡易的 JSON Server 之後, 我們可以來簡單的測試一下其功能, 在開始之前, 我們先介紹一下 JSON 以及 RESTful API 的一些基本概念, RESTful (REpresentational State Transfer) API 的名稱雖然有點難以解釋, 不過可以簡單的想像這是一個建立在 HTTP 協定上的一種通訊規格, 其特色就是透過 URL (網址, IP 和 port 的組合) 對資源進行操作, 而所謂操作對應到 HTTP 協定中的: GET, POST, PUT, DELETE, GET 為查詢 JSON 資源, 只需要填入正確的 URL, 例如: http://localhost:3000/posts/1, 就是查詢 id 為 1 的 posts JSON 內容, POST 為發布一個新的 JSON 資源,  PUT 為更新一則 JSON 資源, 至於 DELETE 則是刪除某一則 JSON 資源, 這部分, 我們會在下一篇文章中利用 postman 來作操作範例, 在一般的網頁瀏覽中, HTTP 承載的內容格式為 HTML (以靜態網頁為例), 並透過瀏覽器將 HTML 的資源轉成圖文並茂的網頁內容, 但在 RESTful API 中, 承載的內容則為 JSON 或是 XML, 其共通之處在於透過 key-value 的形式儲存資料, 而其中, JSON 又因為其輕量簡便的特性, 而受到廣泛的使用. 在上一篇文章中, 我們以 json-server db.json 開啟一個 JSON Server, 其中 db.json 就隱含了 JSON 的格式, 我們可以將此文件打開, 內容如下: { "posts": [ { "id": 1, "title": "json-server", "author": "typicode" } ], "comments": [ { "id": 1, "body": ...

[REST] JSON Server on Ubuntu 16.04

圖片
沒想到也會有要寫 JSON 的一天... 由於按照網路上的教程都無法好好在 Ubuntu 16.04 環境上, 建立 JSON Server, 因此記錄一下自己安裝的步驟: 以下是參考過的資料: https://andy6804tw.github.io/2018/02/01/json-server-intro/ https://oomusou.io/json-server/intro/ https://medium.com/codingthesmartway-com-blog/create-a-rest-api-with-json-server-36da8680136d https://blog.csdn.net/csqingchen/article/details/48495353 https://stackoverflow.com/questions/47767370/package-npm-has-no-installation-candidate 在教程中, 只要一行指令就可以完成 JSON Server 的安裝: npm install -g json-server 然而實際操作之後, 在 16.04 上安裝會出現以下兩個問題: 第一, 存取權限的限制, 這個部分使用 sudo 就可以解決: sudo npm install -g json-server 第二, nodejs 的版本過舊 (4.2.6), 因此, 使用以下兩個指令: sudo npm install n - g sudo n stable 這兩個指令 (作為版本管理) 來升級 nodejs 的套件, 升級後, 就可以適用上述指令安裝 JSON Server. 完成後, 輸入 json-server db.json 就可以從 localhost:3000 看到 JSON server 的介面,  如下圖所示:  這樣就可以確定完成了 JSON Server 的安裝, 接下來, 我們會進一步去研究怎麼進行簡單的操作, 包含: PUSH, GET, POST 的常見的 RESTful API 操作