最近使用lambda和apigateway編寫接口用例,提供rest api。
首先我先稍微說一下概念,lambda是編寫的代碼,我用的python語言來編碼,然后將lambda與api-gateway綁定,當我們調用api接口的時候,會執行lambda函數,python的lambda函數入口走def lambda_handler(event, context),最后將結果return回來,並在接口顯示結果。
如果是單層的lambda綁定單層的apigateway或者多層的apigateway,都是在lambda中直接返回,為了處理跨域問題,還要帶上允許的跨域頭部請求,如下,就可以將你中間處理的代碼結果在body中返回。
def lambda_handler(event, context): # TODO implement return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') 'headers': {'Access-Control-Allow-Origin': '*', "access-control-allow-credentials": "true"} }
比如有一個場景,就是我現在出現的,有100多個lambda對應100多個apigateway,每次部署環境,發布都會特別麻煩是不是。
我們現在要把問題簡化,將100多個的lambda,我們在外面包裹一個主的lambda入口,在編碼里面動態加載這100多個lambda---lambda問題搞定了。
apigateway呢,怎么處理,經過查閱文檔有一個叫做{proxy+}的東西,很好用,比如你的原來地址是/api/version/test1,/api/version/test2,/api/version/test1/test2/test3,就要配置3個apigateway,很麻煩是不是配置完成之后還要部署一下環境。
如果配置{proxy+},相當於{proxys+}=test1 or test2 or test1/test2/test3 方便很多是吧。然后在對你要調用的方法進行相關映射函數的配置,例如你的get的方法怎么取event的傳參,post,put等等。
然后你合並之后,發現這樣子配置,如果像之前那樣子返回,會有跨域的問題,就算你加*,就沒用,這時候要怎么處理呢。
apigateway里面有一個好東西,叫做cors,點擊啟用cors,配置完之后,點擊確定,然后在重新部署一下即可。
然后就大工告成了!