From f295fe698a9f63bbae8a14c952069c1f95003fa9 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Mon, 27 Aug 2012 21:14:05 -0700 Subject: [PATCH] added readme --- samples/server-generator/node/README.md | 109 ++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 samples/server-generator/node/README.md diff --git a/samples/server-generator/node/README.md b/samples/server-generator/node/README.md new file mode 100644 index 00000000000..4514ae88ef2 --- /dev/null +++ b/samples/server-generator/node/README.md @@ -0,0 +1,109 @@ +# Swagger generated server + +## Overview +Using the swagger-codegen, you can not only generate clients but servers as well! The same spec can be used to drive your +development both ways. This is an example of generating a server for `node.js`. + +### Prerequisites +You need the following installed and available in your $PATH: + +
  • - node (http://nodejs.org) + +
  • - Scala 2.9.1 [available here](http://www.scala-lang.org) + +You also need to add the scala binary to your PATH. + +### Generating a server +You first need to build the `swagger-codegen` project--this is done by running this command at the root of the swagger-codegen project: + +``` +mvn package +``` + +You can now generate a server from any valid[**](https://github.com/wordnik/swagger-codegen/blob/master/README.md#validating-your-swagger-spec) swagger spec: + +``` +./bin/runscala.sh samples/server-generator/node/NodeServerFromSpec.scala http://petstore.swagger.wordnik.com/api/resources.json special-key +``` + +After executing this script, you will have an output directory with the server-generated files: + +``` +$ find samples/server-generator/node/output +samples/server-generator/node/output +samples/server-generator/node/output/App +samples/server-generator/node/output/App/apis +samples/server-generator/node/output/App/apis/PetApi.js +samples/server-generator/node/output/App/apis/StoreApi.js +samples/server-generator/node/output/App/apis/UserApi.js +samples/server-generator/node/output/App/Common +samples/server-generator/node/output/App/Common/node +samples/server-generator/node/output/App/Common/node/paramTypes.js +samples/server-generator/node/output/App/Common/node/randomizer.js +samples/server-generator/node/output/App/Common/node/swagger.js +samples/server-generator/node/output/App/main.js +samples/server-generator/node/output/App/models.js +samples/server-generator/node/output/package.json +``` + +To run the server, cd to the `samples/server-generator/node/output` folder and run: + +``` +# install the dependencies +npm install +node Apps/main.js +``` + +You can now load the swagger-ui against `http://localhost:8002/resources.json`. Of course this isn't a fully +runnable server! You have to add the logic in the apis/*.js files. But that's the easy part. + + +### Making it your own +Running the sample is easy, but how about making your own server? Easy! Just modify the `samples/server-generator/node/NodeServerFromSpec.scala` file. +See comments in below, in a copy of the script + +```scala +object NodeServerGenerator extends BasicScalaGenerator { + def main(args: Array[String]) = generateClient(args) + + // if you want to point to a different template directory, change this + override def templateDir = "samples/server-generator/node/templates" + + // where the files are written + val outputFolder = "samples/server-generator/node/output" + + // where to write generated code + override def destinationDir = outputFolder + "/App" + + // template used for apis (writes one file per api) + apiTemplateFiles ++= Map("api.mustache" -> ".js") + + modelTemplateFiles.clear + + // puts the api files in a folder called `apis` + override def apiPackage = Some("apis") + + // copies swagger files and processes any *.mustache files + override def supportingFiles = List( + ("package.json", outputFolder, "package.json"), + ("README.json", outputFolder, "README.md"), + ("main.mustache", destinationDir, "main.js"), + ("models.mustache", destinationDir, "models.js"), + ("Common/node/paramTypes.js", destinationDir + "/Common/node", "paramTypes.js"), + ("Common/node/randomizer.js", destinationDir + "/Common/node", "randomizer.js"), + ("Common/node/swagger.js", destinationDir + "/Common/node", "swagger.js")) +} +``` + +Don't like the templates? Don't worry, we're not offended! They're [mustache](http://mustache.github.com/) templates and are easy to modify. +Take a look at the sample templates here: + +
  • - Generator for your api classes: [api.mustache](https://github.com/wordnik/swagger-codegen/blob/master/samples/server-generator/node/templates/api.mustache) + +
  • - Generator for your models: [models.mustache](https://github.com/wordnik/swagger-codegen/blob/master/samples/server-generator/node/templates/models.mustache) + +
  • - The main class to run your server: [main.mustache](https://github.com/wordnik/swagger-codegen/blob/master/samples/server-generator/node/templates/main.mustache) + + +Sound easy? It is! +