Подтвердить что ты не робот

Что такое простой способ заглушить/заглушить спокойный веб-сервис?

Я хочу создать приложение для Android, это приложение сделает RESTful вызовы веб-службе для получения некоторых данных.

Я знаю, каким будет интерфейс RESTful, но я не хочу хлопот по созданию собственной реализации. Есть ли простой способ создать веб-службу RESTful, которая вернет некоторые статические данные, не создавая для этого полномасштабное приложение WS?

4b9b3361

Ответ 1

Вероятно, самое лучшее, что нужно сделать, это создать макет службы веб-сервиса REST при разработке кода приложения, а затем заменить его кодом, чтобы вызвать фактический веб-сервис, возвращающий "реальные" данные, как только ваше приложение будет написано.

В настоящее время я пишу очень похожее приложение, которое (например, вы) получает данные из веб-приложения RESTful. В моем приложении я следую примеру MVP, рекомендованному GWT, а также документирован Мартином Фаулером как Пассивный образ.

То, что вы хотите сделать, - это абстрагировать код, чтобы вызвать вызов веб-службы REST в интерфейс (Модель). Ответственность этого класса модели заключается в предоставлении данных для Presenter/Controller. Презентатор будет обрабатывать всю вашу бизнес-логику, а затем передавать данные до представления (представление должно быть довольно глупым, а также позволять ему также издеваться). Во время тестирования вы создадите MockModel для реализации интерфейса модели и передачи тестовых данных в Presenter - без фактического вызова веб-службы вообще! Затем, когда вы будете готовы, вы замените этот класс фактическим веб-сервисом и начнете тестирование интеграции.

Этот подход имеет дополнительное преимущество в том, что будет легко создавать конкретные (и повторяемые) тестовые примеры в вашей макетной модели. Если у вас нет контроля над фактическим веб-сервисом (и я предполагаю, что вы этого не делаете), это может быть затруднено (или даже невозможно). Результат должен быть более надежным, лучше проверенным приложением, без необходимости создавать какие-либо тестовые XML или JSON или создавать веб-службы самостоятельно.

Ответ 2

Mocky.io позволяет создавать конечные точки заглушки и указывать данные, которые они возвращают через общедоступные URL-адреса.

Runscope (отказ от ответственности, я основатель) позволяет вам захватывать реальный запрос один раз, а затем воспроизводить ответ по мере необходимости с помощью Ответное воспроизведение".

Ответ 3

Я нашел использование Sinatra действительно полезного для такого рода вещей, если вы хотите проверить фактический код вызова HTTP. У вас может быть конечная точка, возвращающая данные за считанные секунды. Очень мало знаний о Ruby.

require 'sinatra'
require 'json'

get '/Person' do
    content_type :json
    { :id => 345, :key2 => 'John Doe' }.to_json
end

Все, что вам нужно, чтобы вернуть простой объект json.

Ответ 4

Один из подходов (аналогичный Vinnie's) заключается в создании локальной реализации вашего веб-сервиса. Например, ваш веб-сервис позволяет вам регистрировать пользователя и получать список пользователей в Интернете.

Интерфейс webservice выглядит следующим образом:

public interface WebService {
    public LoginResponse login(String user, String pass) throws Exception;
    public UsersOnlineResponse getOnlineUsers() throws Exception;
}

Затем мы реализуем этот интерфейс для удаленного веб-сервиса, который будет использоваться в производстве. Удаленная реализация делает HTTP-вызовы с помощью HTTP-клиента, извлекает ответ и анализирует его на соответствующий объект ответа. Вот его фрагмент:

public class RemoteWebService implements WebService {
    private AndroidHttpClient client = AndroidHttpClient.newInstance(USER_AGENT);

    @Override
    public LoginResponse login(String user, String pass) throws Exception {
        LoginResponse response = client.execute(
            createPostRequest(METHOD_LOGIN, user, pass), 
            new JsonResponseHandler(LoginResponse.class));

        handleResponse(response); // verify response, throw exceptions if needed
        return response;
    }
}

В целях тестирования, когда веб-сервис недоступен или разрабатывается, мы реализуем локальный веб-сервис. Локальная реализация принимает предопределенные ответы JSON из папки с данными и анализирует ее на соответствующий объект ответа. Это зависит от вас, как реализовать поведение webservice: это могут быть простые статические ответы или некоторые случайные/валидационно-зависимые ответы. Вот его часть:

public class LocalWebService implements WebService {
    private Context context;

    public LocalWebService(Context context) {
        this.context = context;
    }

    @Override
    public LoginResponse login(String user, String pass) throws Exception {
        Thread.sleep(DELAY); //emulate network delay

        if (validateParams(user, pass)) {
            return parseAssetsJson("ws/login.json", LoginResponse.class);
        } else {
            Response response = parseAssetsJson("ws/status_bad_request.json", Response.class);
            throw new WebServiceException(response);
        }
    }

    public <T> T parseAssetsJson(String filename, Class<T> klass) throws IOException {
        InputStream is = context.getAssets().open(filename);
        return JsonParser.getInstance().fromJson(new InputStreamReader(is), klass);
    }
}

Далее мы хотим безболезненно переключаться между реализациями. Использование обеих реализаций веб-службы прозрачно, потому что мы используем интерфейс WebService. Итак, мы настроим экземпляр WebService при запуске приложения. Application класс соответствует нашим потребностям:

public class App extends Application {
    public static final boolean USE_LOCAL_WS = false;
    private static WebService webService;

    public static getWebService() {
        return webService;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        webService = USE_LOCAL_WS ? new LocalWebService(this) : new RemoteWebService();
    }
}

Ответ 5

Я бы предложил проверить WireMock (отказ от ответственности - я написал его): http://wiremock.org/

Вы можете запустить его автономно на своем ноутбуке, сконфигурировать закодированные ответы и убедиться, что ваше приложение отправляет запросы, которые вы ожидали.

Он настраивается через свободный Java API или JSON (файлы или через HTTP).

Ответ 6

Я закончил тем, что написал инструмент для сервисов для аналогичной цели: https://github.com/clafonta/Mockey/wiki

Макетная служба - отличный инструмент для быстрого создания пользовательских интерфейсов и проверки вашего клиентского кода, но он может стать кроличьей дырой, поэтому я рекомендую вам использовать то, что уже есть, прежде чем создавать свои собственные. Github имеет множество результатов, когда вы ищете "mock". Независимо от того, что вы делаете, вот несколько ключевых камней преткновения, с которыми вы можете столкнуться.

  • В конечном итоге вы работаете с неправильным форматом данных /JSON.. Например, ваше приложение отлично работает с макетным сервисом, но ломается при попадании на реальный сервис, потому что ваше приложение использует JSON объект, но реальная служба возвращает массив объектов JSON. Чтобы этого избежать, вы можете попробовать использовать JSON Schema, чтобы помочь выделить недопустимые модели JSON в макетной службе.

  • Ваше приложение не делает действительный запрос. Ваш макет службы, как правило, не заботится о входящем запросе. Например, для реального сервиса требуется "идентификатор клиента", и ваше приложение никогда не передает его. Чтобы этого избежать, вы могли бы построить логику проверки "требуемого параметра запроса" в вашей макетной службе.

  • Проблемы с тестированием.. Ваш подход к автоматическому функциональному тестированию должен взаимодействовать с вашим макетным сервисным инструментом, если вы хотите проверить вещи за пределами простого "счастливого пути". Например, вы запускаете свой тестовый "пользователь A log-in и видит 0 сообщений" против "пользовательских логов B" и видит 20 сообщений ".

Ответ 7

Вы можете попробовать Jadler (http://jadler.net). Это http stubbing/mocking library, над которой я работал некоторое время. Он должен соответствовать всем вашим требованиям, которые я считаю.

Ответ 8

Beeceptor (отказ от ответственности, я автор) поможет вам в конкретном прецеденте. Создайте конечную точку API, определите макет и ответ. Используйте его в hackathons для создания ложных API за считанные секунды.

Beeceptor - это нечто большее, чем насмешливое служение. Это HTTP-прокси для API. Например, если у вас есть реальный API, используйте настоящий API как конечную цель. Beecetor перехватывает трафик и использует правила,

  • когда правила сопоставляются, APIs издеваются
  • Если ни одно правило не соответствует, конечная точка цели будет удалена, как обычно.

С Mocky.io у вас будут разные пути API, с Beeceptor ваш базовый URL будет одинаковым все время.

Ответ 9

Создайте несколько файлов с фиктивными ответами и поместите их в папку. Теперь перейдите в командную строку и выполните следующее: python -m SimpleHTTPServer

Теперь вы можете получить доступ к этим файлам и фиктивным ответам Http://: 8000

Ответ 10

Я предлагаю взглянуть на FakeRest (https://github.com/marmelab/FakeRest), только поддельный сервер на стороне клиента, использующий исправление обезьяны XMLHTTPRequest.

Отказ от ответственности: я написал его.

Ответ 11

Atmo может быть полезно.

Отказ от ответственности: я автор atmo.

Ответ 12

На всякий случай кто-то все еще смотрит на этот поток на year >= 2017. Там теперь есть бесплатный инструмент, который позволяет вам создавать mock soap и отдыхать веб-сервисы за считанные секунды без необходимости устанавливать или развернуть что-либо на вашем ящике.

amock.io

Вы можете выбрать свой метод http, код ответа, тело сообщения ответа, тип контента, указать пользовательскую конечную точку и т.д.

Это очень полезно для возвращения макетных данных из удаленных веб-сервисов в ваше приложение, любое приложение.

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

Ответ 13

Вы можете использовать https://mockservice.io/?r=sof tool. Используя его, вы можете смоделировать REST API, возвращающий указанный контент (включая JSON, html). Вы даже можете генерировать динамические ответы на основе входящего запроса.

Ответ 14

Вы можете использовать http://maqueapp.com/, чтобы создать макет веб-сервиса. Это быстро и легко. Я слышал об этом на theflexshow episode 157 (не flexshow!)