digitalmars.D - vibe.d get parameters
- Brian Forbes (37/37) May 05 2016 Hello,
 - Dicebot (25/25) May 05 2016 There are two problems here.
 
Hello,
     I have been programming in D now for a few months, and I am 
really impressed by how easy it is to get things up and running.
     However, I have run into some problems with vibe.d. I can't 
seem to figure out how to pass a get parameter after searching 
online for a few days.
     The code is more or less as below. I have tried lots of 
variations on how to add an input parameter (using something/:id 
etc) but everything gives a 404 error.
     Any help would be greatly appreciated. Thanks !
http://localhost:8081/something?id=a ( <---- this gives 404 )
import vibe.d;
import std.stdio;
import std.conv;
import std.json;
shared static this()
{
	auto router = new URLRouter;
	router.registerRestInterface(new ApiImpl);
	auto settings = new HTTPServerSettings;
	settings.port = 8081;
	listenHTTP(settings, router);
	logInfo("Please open http://127.0.0.1:8081/ in your browser.");
}
  interface Api
  {
       method(HTTPMethod.GET)  path("/something/")
      string getSomething(string id);
  }
  class ApiImpl: Api
  {
      override:
          string getSomething(string id)
          {
              return id ~ "\nhello word";
          }
  }
 May 05 2016
There are two problems here.
1) Your problem comes from the fact that `id` parameter name has 
been special cased since early vibe.d versions to mean URL 
parameter. If you enable `setLogLevel(LogLevel.debug_);` in the 
very beginning of module constructor, you will see this trace:
REST route: GET /:id/something/ []
add route GET /:id/something/
It basically automatically rewrites route to prepend :id and 
treats `string id` as if it was `string _id`.
2) Changing the name of string argument to `xxx` still doesn't 
work and now prints this in debug trace:
REST route: GET /something/ ["xxx"]
add route GET /something/
Note the / in the end. Vibe.d does exact matching of slashes in 
the version I have checked so you would have to request 
http://127.0.0.1:8081/something/?xxx=a to get response.
So to make URL you want to work you'd need to do something like 
this:
```
interface Api
{
      method(HTTPMethod.GET)  path("/something")
     string getSomething(string xxx);
}
```
 May 05 2016








 
 
 
 Dicebot <public dicebot.lv>