Thread overview
Best way for handle missing args in REST interface in vibed
May 29, 2017
Suliman
May 29, 2017
Suliman
May 29, 2017
Nicholas Wilson
May 29, 2017
Suliman
May 29, 2017
Suliman
May 30, 2017
Suliman
May 29, 2017
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
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
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
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
@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
I had post question here http://forum.rejectedsoftware.com/groups/rejectedsoftware.vibed/thread/43511/