Несколько методов get в одном классе Resource с Restlet - PullRequest
1 голос
/ 30 сентября 2011

вот мой код:

это мой класс приложения >>>

import org.restlet.Application;

import org.restlet.Restlet;

import org.restlet.routing.Router;

import firstSteps.UserResource;

public class FirstStepsApplication extends Application {

    @Override

    public synchronized Restlet createRoot() {

        Router router = new Router(getContext());

        router.attach("/hello", UserResource.class);

        router.attach("/isuserloggedin",UserResource.class);

        return router;
    }

}

это класс ресурсов >>>

import org.restlet.resource.Get;

import org.restlet.resource.ServerResource;

/**
 * Resource which has only one representation.
 * 
 */  

public class UserResource extends ServerResource {

    @Get

    public String userLogin() {

        return "This is userLogin method";
     }


    @Get

    public boolean isUserLoggedIn(){

        return false;

    }
}

/hello& /isuserloggedin сопоставлены с тем же классом ресурсов, но я хочу: когда есть /hello, тогда должен вызываться метод userLogin, а когда есть /isuserloggedin, тогда должен вызываться isUserLoggedIn.Это возможно ??или я ошибаюсь?если это невозможно, то кто-нибудь может сказать мне любую другую альтернативу?

Ответы [ 2 ]

4 голосов
/ 04 октября 2011

В Restlet 2.1 (попробуйте M7 или выше) можно отправить два HTTP-вызова GET двум Java-методам в одном классе ресурсов.Это достигается путем использования параметров запроса, таких как:

import org.restlet.resource.Get;

import org.restlet.resource.ServerResource;

/**
 * Resource which has only one representation.
 * 
 */  

public class UserResource extends ServerResource {

    @Get
    public String userLogin() {

        return "This is userLogin method";
     }


    @Get("?loggedIn")

    public boolean isUserLoggedIn(){

        return false;

    }
}

Однако, как уже указывалось, вам лучше использовать отдельный класс ресурсов.

0 голосов
/ 30 сентября 2011

Прошло некоторое время с момента моего последнего опыта работы с Restlet, в любом случае, если вы реализуете полностью REST API, я бы ожидал, что эти два будут отдельными ресурсами, если они действительно необходимы.В противном случае ресурс должен быть сопоставлен ровно одному представлению, ИМХО.

В чем преимущество двух URI, сопоставленных одному классу ресурсов, вместо двух, каждый из которых реализует метод GET?Кажется, что здесь добавляется некоторая двусмысленность, без какой-либо выгоды.

Я бы вернул информацию о статусе (зарегистрировано или нет) в представлении пользователя.

Теперь, для полноты, яМне сложно понять вашу семантику API: могу ли я запросить статус зарегистрированного пользователя или только моего?Это не очень понятно, но я понимаю, что это было не главное.

Точно так же, как хорошее чтение, вы можете взглянуть на некоторые популярные REST API, чтобы увидеть, как они решают проблемы, подобные вашим,то есть.Мне особенно нравится API пользователей Github .

Надеюсь, это поможет.

...