lambda-api icon indicating copy to clipboard operation
lambda-api copied to clipboard

Add support to run standalone API server locally

Open abmohan opened this issue 6 years ago • 10 comments

sls invoke is useful for testing our API one request at a time.

It would be nice to spin up a local version of the API on localhost to enable us to develop our frontend apps against it, and to more easily run integration and E2E tests.

abmohan avatar Jun 28 '18 18:06 abmohan

@abmohan, this is a great idea. This might be possible with the serverless-offline plugin, but it would be nice to have a solution that wasn't tethered to a single framework. I'll do some investigating, but any ideas you have would be appreciated!

jeremydaly avatar Jul 08 '18 16:07 jeremydaly

Thanks, @jeremydaly. I was thinking of trying to wrap it in an express app for this purpose but opted to just go with serverless-offline, since we're using serverless for the rest of our build process as well.

If you do come up with an idea and would like some help putting it together, I'm happy to give it a shot!

abmohan avatar Jul 09 '18 01:07 abmohan

I can confirm that lambda-api works perfectly fine with serverless-offline.

Note that serverless-offline just simulates AWS API Gateway, so it is framework agnostic.

compwright avatar Sep 10 '18 17:09 compwright

I can confirm that lambda-api works fine with AWS SAM CLI https://github.com/awslabs/aws-sam-cli

GuidoNebiolo avatar Nov 05 '18 10:11 GuidoNebiolo

In the spirit of keeping dependencies and external tools to a minimum, I solved this by splitting the route management into a separate module (api.js) so that it could be accessed either by lambda.js or local.js. The latter contains a small web server that fakes the essentials for lambda-api to function properly.

I've put my sample solution in a gist here: https://gist.github.com/Sleavely/f87448d2c1c13d467f3ea8fc7e864955

Sleavely avatar Dec 30 '18 18:12 Sleavely

In the spirit of keeping dependencies and external tools to a minimum, I solved this by splitting the route management into a separate module (api.js) so that it could be accessed either by lambda.js or local.js. The latter contains a small web server that fakes the essentials for lambda-api to function properly.

I've put my sample solution in a gist here: https://gist.github.com/Sleavely/f87448d2c1c13d467f3ea8fc7e864955

In my local env, throw a exception and not work :( You can help me? Thanks

image

jlopezcrd avatar May 23 '20 16:05 jlopezcrd

In the spirit of keeping dependencies and external tools to a minimum, I solved this by splitting the route management into a separate module (api.js) so that it could be accessed either by lambda.js or local.js. The latter contains a small web server that fakes the essentials for lambda-api to function properly. I've put my sample solution in a gist here: https://gist.github.com/Sleavely/f87448d2c1c13d467f3ea8fc7e864955

In my local env, throw a exception and not work :( You can help me? Thanks

image

It looks like there is no body in the response. Could it be because you don't have a route defined for the path you are accessing? If you copy-pasted my Gist as-is; does /status work? Are you able to share the code that's breaking?

Sleavely avatar May 23 '20 16:05 Sleavely

In the spirit of keeping dependencies and external tools to a minimum, I solved this by splitting the route management into a separate module (api.js) so that it could be accessed either by lambda.js or local.js. The latter contains a small web server that fakes the essentials for lambda-api to function properly. I've put my sample solution in a gist here: https://gist.github.com/Sleavely/f87448d2c1c13d467f3ea8fc7e864955

In my local env, throw a exception and not work :( You can help me? Thanks image

It looks like there is no body in the response. Could it be because you don't have a route defined for the path you are accessing? If you copy-pasted my Gist as-is; does /status work? Are you able to share the code that's breaking?

Yes, i upload the test code to my github: https://github.com/jlopezcrd/lambda-api-test

jlopezcrd avatar May 24 '20 16:05 jlopezcrd

In the spirit of keeping dependencies and external tools to a minimum, I solved this by splitting the route management into a separate module (api.js) so that it could be accessed either by lambda.js or local.js. The latter contains a small web server that fakes the essentials for lambda-api to function properly.

I've put my sample solution in a gist here: https://gist.github.com/Sleavely/f87448d2c1c13d467f3ea8fc7e864955

I've modified the local file and it works. You can review it: https://github.com/jlopezcrd/lambda-api-test/compare/master...fixlocal?expand=1

Regards.

jlopezcrd avatar May 26 '20 20:05 jlopezcrd

I've modified the local file and it works. You can review it: https://github.com/jlopezcrd/lambda-api-test/compare/master...fixlocal?expand=1

Regards.

Interesting. I'm not sure why that approach works but I'm glad you got it running :)

Sleavely avatar May 27 '20 08:05 Sleavely