2017年7月26日 星期三

HTTP v.s. SOAP

HTTP 可以提供各種服務 - HTML, images, sound, video, etc.
SOAP 是在 HTTP 上面, 專門提供 XML 傳送的服務.

SOAP 的request 如下,HTTP headers在上面, SOAP message 在下面:

---------  HTTP portion of the message ------
POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

---------  SOAP portion of the message ------
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPrice>
    <m:StockName>IBM</m:StockName>
  </m:GetStockPrice>
</soap:Body>

</soap:Envelope>

reference:
Difference between SOAP and HTTP protocol <Link>

2017年7月20日 星期四

HTTP Request methods - Get and Post methods

HTTP Request methods 有下列8種方法:

  1. GET
  2. POST
  3. OPTIONS
  4. HEAD
  5. PUT
  6. DELETE
  7. TRACE
  8. CONNECT
先介紹最常用的 GET 與 POST 方法:

  1. GET:取得我們想要的資料。把查詢資訊放在URI上, 「取得」想要的資訊。 
    • Ex: http://xxx.toright.com/?id=010101
  2. POST:新增一項資料(不會覆蓋舊資料)。要求Server接受的資訊是附在請求本體(Body), 而不是在URI上

Reference:
  1. 常見的HTTP METHOD的不同性質分析 <Link>
  2. 重新認識HTTP請求方法 <Link>
  3. 淺談 HTTP Method:表單中的 GET 與 POST 有什麼差別 <Link>

2017年7月3日 星期一

OOD 原則 - SOLID

OOD 原則 - SOLID

物件導向設計 5 大原則:
1. (SRP) 單一職責:
    一個類別只負責一件事情

2. (OCP) 開放/封閉原則:
    開放擴充, 關閉修改

3. (LSP) Liskov替換:
    子類別應該可以替換掉父類別而不會影響程式架構
    子類別可以擴充父類別的功能, 但不能改變父類別原有的功能。子類別不要覆蓋父類別的方法!
    -->設計上應該少用繼承, 多用composite/aggregation 達到re-use目的 (i.e., 做一個wrapper 包住 base class)
    --> CARD - 先思考 Composition/Aggregation 的 Reuse ,真的沒辦法才思考 Derivation

4. (ISP) 介面隔離:
     使用多個專門介面, 比使用單一總介面要好! 把不同的函數從介面中分離出來
    --> 不同的函數應該屬於不同的介面

5. (DIP) 依賴反轉
    高階模組不應依賴低階模組,兩個都應該依賴在抽象概念上
    抽象不應該依賴於細節, 細節應該依賴於抽象!
    --> 針對介面寫程式
    --> Dependency Injection 是實作 DIP 的手法 (例如: 通過Constructor注入依賴)
    --> 若一個Constructor注入太多的依賴,則此Class 可能違反了SRP

SRP 與 OCP 都只是一個方向, 不是教義! 寫程式要專注一個主要的核心任務, class要盡可能簡單, 但是不是教義!