provider_accept_narrow_match route trace
文件狀態:已對 legacy / 已對 new API / 待補 ALB 實際查詢結果
最後驗證:2026-05-07
來源:legacy CakePHP controller convention、new RouterV3 / Mapping / Origin / File、Endpoint/V1/In.php ALB log 匯入線索、專案 migration detail
要回答的問題
這個案例只示範如何從一個外部 URL 找到新舊專案中的入口程式:
POST /quote_bids/provider_accept_narrow_match/<quote_bid_id>.json它不重寫完整業務規則、付款規則或 DB side effect。那些內容請看:
- 業務流程/narrow_match
- 付款與扣款流程/quote_bid_contact_charge
- 專案 migration detail:
API 路由與遷移/API Migration/pro360_api_82/api_migration/details/quote_bids/provider_accept_narrow_match.md
1. 先確認目前實際流量
不要只靠 code 判斷某個 path 是否還在用。先查目前正式 / staging access log。
目前 new API 可從 AWS Application Load Balancer access log 查實際打進來的 URL。
已知線索:
/Users/mattsu/Documents/Site/pro360_api_82/Endpoint/V1/In.php
::load_api_logs()這段程式註解中指向 ALB log S3 來源:
s3 bucket: pro360-alb-logs
prefix: web/AWSLogs/<account-id>/elasticloadbalancing/ap-northeast-1/YYYY/MM/DD/匯入後會寫入:
alb_log2s因此 route migration 時可以先用 ALB log 查:
quote_bids/provider_accept_narrow_match要確認:
- 實際 host 是
api.pro360.com.tw、api-staging.pro360.com.tw或其他 host。 - path 是否含
/v1/。 - path 是否仍是 legacy-compatible 格式。
- method 是
GET、POST或其他。 - 是否有
.jsonextension。 - 是否有 named param,例如
narrow_status_id:2。
access log 統計屬於 migration evidence,應放 專案 migration detail;共同文件只記查詢方法。
2. 找 legacy 專案入口
legacy URL:
POST /quote_bids/provider_accept_narrow_match/<quote_bid_id>.json先查明確 routes:
/Users/mattsu/Documents/Site/get-lancer-php56/app/Config/routes.php
/Users/mattsu/Documents/Site/get-lancer-php56/app/Config/cms_routes.php如果 routes 裡沒有明確定義,再走 CakePHP convention。
這支會落到 plugin controller:
/Users/mattsu/Documents/Site/get-lancer-php56/app/Plugin/Quotes/Controller/QuoteBidsController.php
::provider_accept_narrow_match($quote_bid_id)接著再追 controller 呼叫的 domain method:
/Users/mattsu/Documents/Site/get-lancer-php56/app/Plugin/Quotes/Model/QuoteBid.php
::processProviderAcceptNarrowMatch(...)重點:legacy routes 沒看到不代表不存在。CakePHP 會依 controller/action convention 解析。
3. 找 new API 入口
new API 先看 router,不要直接跳 endpoint method。
主要檔案:
/Users/mattsu/Documents/Site/pro360_api_82/Lib/Common/RouterV3.php
/Users/mattsu/Documents/Site/pro360_api_82/Lib/Common/RouterRule/Mapping.php
/Users/mattsu/Documents/Site/pro360_api_82/Lib/Common/RouterRule/Origin.php
/Users/mattsu/Documents/Site/pro360_api_82/Lib/Common/RouterRule/File.php查詢順序:
RouterV3::dispatch()
-> Mapping::routing()
-> Origin::routing()
-> File::routing()4. 什麼時候查 Mapping.php
一般先用 path 推 endpoint:
quote_bids/provider_accept_narrow_match/<quote_bid_id>.json
-> quote_bids
-> QuoteBids
-> Endpoint/V1/QuoteBids.php
-> provider_accept_narrow_match()如果下列任一情況發生,就要回去查 Mapping.php:
- URL 字面上的 controller/action 找不到對應 endpoint file。
- endpoint file 有 method,但實際 URL 打不到。
- legacy URL 和 new endpoint/action 名稱不同。
- path params 需要被改寫成 named params。
- route 看起來像舊 CakePHP path,但 new API endpoint 命名不同。
- 同一支 endpoint 可能支援多個 legacy-compatible URL。
這支目前沒有明確 mapping,因此會靠 fallback:
Mapping miss
-> Origin miss 或不適用
-> File fallbackFile.php 會在第一段不是 vN 或 admin 時自動補 v1:
quote_bids/provider_accept_narrow_match/<quote_bid_id>.json
-> v1/quote_bids/provider_accept_narrow_match/<quote_bid_id>最後進:
/Users/mattsu/Documents/Site/pro360_api_82/Endpoint/V1/QuoteBids.php
::provider_accept_narrow_match()5. 確認參數怎麼進 endpoint
route 解析後重點:
controller = quote_bids
action = provider_accept_narrow_match
rawParams[0] = <quote_bid_id>這支的 <quote_bid_id> 是 raw param,不是 named param。
常見來源:
| 值 | 來源 |
|---|---|
quote_bid_id | path raw param,例如 rawParams[0] |
narrow_status_id | URL named param 或 body,例如 narrow_status_id:2 |
reason | POST body |
prime | POST body |
auth header 另查 專案身份驗證方式。
6. 這個案例示範的查詢規則
- 先用 ALB / access log 確認目前真實流量,不只看 code。
- legacy routes 找不到時,改用 CakePHP controller/action convention 找。
- new API 不要只看
Endpoint/V1/*.php,要先看 RouterV3 rule 順序。 - 一般 controller/action 命名推不到時,查
Mapping.php。 Mapping.php沒有不代表打不到,可能走File.phpfallback。- endpoint path 能打到後,再去業務流程文件看 side effect。