iT邦幫忙

1

Wab API 使用時機的迷思...

這個問題小魯自己都覺得很蠢煩請大大門鞭小力點(;´゚ω゚`人)
是這樣的假設我已經建立好一組API :http://www.test.com/api/Products 可以取得商品的資料
然後我在同網域建立了一個網站並且要開啟商品頁面:http://www.test.com/Products.php

那....一般來說 伺服器要取得 Products.php 的資料的時候 會直接摳已經寫好的API拿資料嗎? (http://www.test.com/api/Products) 還是會另外從DB裡面撈出來呢?

小魯自己是覺得在從DB撈才對 但是不是很確定 求大大開釋 <(_ _)>

另外想問 在網站中通常什麼時候會用到API呢?

看更多先前的討論...收起先前的討論...
Homura iT邦高手 1 級 ‧ 2018-09-11 13:41:32 檢舉
BD??藍光??
還是你是指DB???
DB啦 抱歉抱歉QQ
Homura iT邦高手 1 級 ‧ 2018-09-11 14:31:05 檢舉
我還跑去查一下那是什麼呢!QQ
其實你可以估狗一下很多答案的
@Homura 找很多都是API的實作方法 跟 RESTful 或REST的介紹 就是沒有我想知道的答案呀呀呀........
是不是問題太基本沒人討論= =?
froce iT邦大師 5 級 ‧ 2018-09-11 14:40:39 檢舉
RESTful api就是為了要做到前後端完全分離才好用啊。
我想你大概很久沒寫網頁了。

幫你理清一下。
1.RESTful api是透過網址來存取資料庫,得到所要的資料。
2.既然透過網址,那我前端是不是不需要跟後端混在一起?直接用ajax去取得資料,然後做rendering就好。
3.既然我前端不需要透過後端取資料後,填入html template,那是不是就直接把前端當成一個app,在app中做route就好?

所以我們現在有單頁應用程式(SPA),搭配RWD,就可以一個js的project應用到手機、網頁上使用。

當然SPA也是有所限制,像是對SEO不友善,對前端來說技術門檻較高、對中小型計畫來說有沒有必要使用SPA、對一個人開發的全端(像魯者我)來說有沒有省到事,這些都要評估。
Homura iT邦高手 1 級 ‧ 2018-09-11 14:59:33 檢舉
沒有嗎??
那我說一下我知道的好了
像是froce提到上面那些之外
你的API還能給非網頁使用
例如桌面App,手機App
這樣就不需把後端整個重寫一次
現在除了網頁外大部分App都是要透過API連線
而不是直接透過資料庫這樣太危險

API還能提供給你的客戶用
例如Google地圖推出他的API功能給其他開發者使用他地圖功能
或是金流程式需要跟銀行的API溝通傳遞資料
總之Web API就是提供一個程式和程式間的溝通橋樑

另外我估狗到的資料你能看看
https://buzzorange.com/techorange/2014/01/06/future-api-design-orchestration-layer/
@froce大 感謝你的回答
小魯 網頁真的很久沒碰了 中離跑去玩Unity3D 是工作上串接到wabApi 覺得有趣才回來研就看看...(つд⊂)
所以 如果網站不在前端render網頁其實也不需要呼叫API
本來也想說有API做成SPA很像很適合 但真的如 froce大 說的 沒有比較省事 而且我覺得JS比PHP難寫....
@Homura 感謝你的回答
API提供給外部程式使用的方面 功能性很明確
但是我是卡在 在自己網站內部使用恰不恰當 這關過不去....
因為不知道在哪個大陸網站上看到 網路層 架構在 API層 之上 然後我就卡關了
froce iT邦大師 5 級 ‧ 2018-09-11 15:54:31 檢舉
你在後端如果能直接取資料,就不用透過web api取資料,這樣還要送request去給server,http的消耗一定比你直接送資料庫取來的大。後端要透過web api取自己資料庫的資料是脫褲子放屁。XD
weiclin iT邦高手 4 級 ‧ 2018-09-11 17:20:59 檢舉
要取得 Product 的資料時, 一開始顯示頁面可以直接從 DB 讀取, 但如果資料更新時要能自動顯示更新後的資料, 那你可能用 AJAX 的方式, 就會需要用到 API 了
小魚 iT邦高手 1 級 ‧ 2018-09-11 17:26:09 檢舉
我不知道"Wab API" 我只知道 "Web API"...
API一般是用來給前端或是要從其他程式取資料用的,
像Google的API都是開給別人(賺錢?)用的,
如果你的程式全部都是直接讀資料庫就不需要API,
另外像要從手機讀資料庫,
有人建議最好是透過API來讀會比較好,
聽說是比較安全這方面我就沒研究了...
這是抓錯字大賽嗎 (〒︿〒)
感謝各位大大的開釋 小魯已經不迷惘了!!!
froce iT邦大師 5 級 ‧ 2018-09-11 20:30:07 檢舉
另外像要從手機讀資料庫,
有人建議最好是透過API來讀會比較好

因為java蠻容易被反解譯的,所以...
帳號、密碼、資料庫位址、port都給人家看不太好吧。XD
聽起來 大大們說的手機 是指APP吼 我還以為是手機版網頁XD
froce iT邦大師 5 級 ‧ 2018-09-11 22:03:16 檢舉
都可以啊,web api做好,你要用手機app還是網頁版甚至是電腦版app接後端,都沒問題。
前後端完全分離就是有這好處。

2 個回答

5
q00153
iT邦新手 3 級 ‧ 2018-09-11 17:37:38
最佳解答

我舉一個自己的例子給您參考
依照你的困擾,抓取資料呈現在網頁上有三種方式
1.後端連線 DB
2.前端透過 api 撈取資料
3.後端透過 api 撈取資料

俺實務上傾向第三種 @@~
比如我們公司的網站架構
網站切分成很多小專案,每個專案一個資料夾
在架構時遇到一個需求,就是"共通資源"的引用
一般來說是 js、css、img 之類...

還有使用者權限的驗證,各個專案間的資料共用 (比如人事資料、刷卡資料等...)
這時候用傳統架構會很難管理 >"<~
用第二種架構又不切實際 (總不能連 css、js、img 等等共通資源都要開啟網頁時都再用 ajax 去載入吧...

所以我們採用了第三種 @@~
比如這個頁面會用到 jQuery、VUE、還有一些自己寫的 css
只要在後台的 PHP 先指定要引用的資原名稱

<?php 
    $assets = needAssetsLink('http://mywebsite/assets/link/', ["jQuery", "VUE", "myCss"]); 
    $logo = needAssetsLink('http://mywebsite/assets/link/', ["Logo"]); 
?>

封裝好的函數就會使用 api 去取得資源的路徑
再透過已經定義好的框架
就會自動在頁面裡面加上資源的連結

<html>
<head>
    <link rel="shortcut icon" href="<?php print($logo);?>">
</head>
    <?php print($assets); ?> //這裡會輸出資源連結的 html
<body>
</body>
</html>

各個專案之間也是透過這樣共用資料
好處是如果以後資源要替換
不用一個一個專案去修改 @@~
更新 assets 專案的資源就可以
而且也可以根據請求的來源決定要回傳什麼資源
比如預設都會回傳 jQuery
因為每一個專案都會用到 XD

不過如果是資源需求大量計算的情況
是透過第一種方法去處理
比如兩、三個專案間的資料庫資料交互計算
用到大量或複雜的 SQL 語法時 (每 15 分鐘統計各個機台、產線生產資料之類...)
就不適合用 api 的方式一隻一隻呼叫

第二種方法則是使用在大量資料的呈現上
比如很長的統計資料 (要看過去五年的總生產資料,這時候會有樹狀圖,等使用者點開了分支再載入相關資料呈現...)
或者很多的圖片
那種需要隨著網頁滾動呈現資料的場景
或者資料量不適合一次載入網頁的場景

以上~供您參考~~

感謝q00153大大的分享 這種API使用方式跟Unity3D的 Assetbundle 足足有87分像呀~真是開了眼界 (☉д⊙)~~
已收藏!!

0
石頭
iT邦研究生 3 級 ‧ 2018-09-12 06:37:00

個人覺得Web API主要意圖是提供服務

使用Web API時機在於,會有多方來使用此服務就可考慮做成API

例如 你有A server,B server... 他們都會使用同一種功能或方法 我們可以把他寫成一個服務提供出來串接給 A server,B server... 使用.

哪一天我要更改服務邏輯(服務簽章不變) 我只要更改我Wab API程式邏輯 其他串接方都不用改變,就可享有修改邏輯的福利.

就像你很多重複的程式碼,可以考慮提取方法 達成程式碼乾淨簡潔 不要DRY

Homura iT邦高手 1 級 ‧ 2018-09-12 09:05:57 檢舉

Web API@@

@dog830228大 感謝你的解答 讓我知道更多 "web"ApI 的應用方法

@Homura大 不要再抓錯字了啦(〒︿〒)

Ryan iT邦新手 5 級 ‧ 2018-09-14 10:38:33 檢舉

Web API將各式邏輯包在裡面,只好定義好輸入值輸出值的格,即供其它程式使用。 例如:https://data.taipei/index 也是一種提供web api的網站。

我要發表回答

立即登入回答