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。那些內容請看:

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.twapi-staging.pro360.com.tw 或其他 host。
  • path 是否含 /v1/
  • path 是否仍是 legacy-compatible 格式。
  • method 是 GETPOST 或其他。
  • 是否有 .json extension。
  • 是否有 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 fallback

File.php 會在第一段不是 vNadmin 時自動補 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_idpath raw param,例如 rawParams[0]
narrow_status_idURL named param 或 body,例如 narrow_status_id:2
reasonPOST body
primePOST 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.php fallback。
  • endpoint path 能打到後,再去業務流程文件看 side effect。

相關文件