| Thread overview |
|---|
May 29, 2017 Best way for handle missing args in REST interface in vibed | ||||
|---|---|---|---|---|
| ||||
I am doing REST interface with vibed. And thinking about handling errors, if users forgot to pass all expected args in function.
For example:
foo(int x, int y) // get request
{
}
/api/foo?x=111
And if user is forgot to pass `y` we will get error in the browser. What is the right way to handle curch cases?
Wrap is with try-catch looks wrong.
| ||||
May 29, 2017 Re: Best way for handle missing args in REST interface in vibed | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Suliman | On Monday, 29 May 2017 at 12:23:59 UTC, Suliman wrote: > I am doing REST interface with vibed. And thinking about handling errors, if users forgot to pass all expected args in function. > > For example: > foo(int x, int y) // get request > { > > } > > /api/foo?x=111 > > And if user is forgot to pass `y` we will get error in the browser. What is the right way to handle curch cases? > > Wrap is with try-catch looks wrong. It's seems I found how to do it http://vibed.org/api/vibe.web.web/errorDisplay | |||
May 29, 2017 Re: Best way for handle missing args in REST interface in vibed | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Suliman | On Monday, 29 May 2017 at 12:23:59 UTC, Suliman wrote:
> I am doing REST interface with vibed. And thinking about handling errors, if users forgot to pass all expected args in function.
>
> For example:
> foo(int x, int y) // get request
> {
>
> }
>
> /api/foo?x=111
>
> And if user is forgot to pass `y` we will get error in the browser. What is the right way to handle curch cases?
>
> Wrap is with try-catch looks wrong.
That depends on wether or not there is a sensible default for y, if so
foo(int x, int y=0)
ought to work.
| |||
May 29, 2017 Re: Best way for handle missing args in REST interface in vibed | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Nicholas Wilson | I wrote next code:
void foo(string _error = null)
{
writeln("Error");
}
override:
@errorDisplay!foo
Json doTrackSpeedAnalyze(int trackid, string startDateTime, string endDateTime) // /api/mytrack?trackid=123&startDateTime=2000&endDateTime=2010
{
if(endDateTime.length == 0)
{
throw new Exception("End Date must not be empty");
}
return Json.emptyObject;
}
If I access to url: /api/mytrack?trackid=123&startDateTime=2000 (witout endDateTime) I am expecting execution foo() block, but it does not happens. Why?
And what do Exception here? Why should handle it?
| |||
May 29, 2017 Re: Best way for handle missing args in REST interface in vibed | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Suliman | @rootPathFromName
interface API
{
@path("mytrack") @method(HTTPMethod.GET) Json doTrackSpeedAnalyze(int trackid, string startDateTime, string endDateTime);
}
class MyRouter : API
{
Config config;
Database database;
this(Config config, Database database)
{
this.config = config;
this.database = database;
}
@path("/")
void foo(string _error = null) // I expect that this will be called if exception happen in doTrackSpeedAnalyze
{
writeln("Error in console"); // does not writing on console
}
override:
@errorDisplay!foo
Json doTrackSpeedAnalyze(int trackid, string startDateTime, string endDateTime) // /api/mytrack?trackid=123&startDateTime=2000&endDateTime=2010
{
if(endDateTime == "0")
{
throw new Exception("Some fields are empty");
}
return Json.emptyObject;
}
}
What I am doing wrong? Should I do override for foo? Should foo present in `interface`?
| |||
May 30, 2017 Re: Best way for handle missing args in REST interface in vibed | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Suliman | I had post question here http://forum.rejectedsoftware.com/groups/rejectedsoftware.vibed/thread/43511/ | |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply