提供給其他系統使用的 API,「always try catch」是基本的設計規範,無論處理結果如何,都是回傳 HTTP status code 200 OK,並且以 success 布林屬性回傳表示成功或失敗,以及 message 字串提供額外訊息。
API 以 order 為例,傳入訂單代碼 OrderID,回傳訂單與商品明細。
程式摘要:
dynamic json = new JObject();
// always try catch
try {
if(null == Order) {
throw new KException("查不到這筆訂單資料");
}
// Order
json.OrderID = Order.OrderID;
json.CustomerID = Order.CustomerID;
json.CreateDate = Order.CreateDate;
// Order Products
JArray orderProducts = new JArray();
foreach(var one in Order.OrderProducts) {
dynamic orderProduct = new JObject();
orderProduct.OrderProductID = one.OrderProductID; // 訂單商品代碼
orderProduct.ProductID = one.ProductID; // 商品代碼
orderProduct.Quantity = one.Quantity; // 數量
orderProduct.UnitPrice = one.UnitPrice; // 單價
orderProduct.Unit = one.Product.Unit; // 單位
orderProduct.ProductName = one.Product.Name; // 商品名稱
orderProduct.BrandName = one.Product.Brand.Name; // 品牌名稱
orderProducts.Add(orderProduct);
}
json.OrderProducts = orderProducts;
// 回傳 JSON 格式資料
json.success = true;
json.message = "成功";
} catch(KException kx) {
Logger.Error("/api/order.ashx", kx);
json = new JObject();
json.success = false;
json.message = kx.Message; // 拋出異常訊息
} catch(Exception ex) {
Logger.Error("/api/order.ashx", ex);
json = new JObject();
json.success = false;
json.message = "系統異常,請稍後再試";
}
Response.Write(JsonConvert.SerializeObject(json));
API回傳JSON資料: