Не удается найти подходящий фиктивный сервер для предоставления ответов json с предопределенным URL-адресом

Ну проблема в следующем:

Я разрабатываю приложение для внешнего интерфейса (используя vue.js), мне нужно искать фиктивный бэкэнд (я не должен издеваться над ним спереди).

В этом приложении я могу делать http-запросы, меня интересуют только GET и PATCH, я хочу делать эти запросы на фиктивный сервер (совместимый с json:api, что означает, что он возвращает правильный заголовок типа содержимого как application/vnd.api+ json).

Этот сервер должен ответить предопределенным (уже жестко закодированным) ответом json, поэтому единственное, что меня волнует, это то, что сервер просматривает URL-адрес в запросе и отвечает существующим файлом или объектом json.

Я видел несколько решений, но не одно, в котором я могу настроить URL-адрес для получения следующим образом (мне просто важно, что если метод и URL-адрес совпадают, я возвращаю файл json), например:

  • Запрос: (может быть mysite (точка) com или localhost:PORTNUMBER)
    GET http://localhost:PORTNUMBER/api/projects/1000?include=subtree,subtree.vertices,vertices

а затем я отвечаю жестко закодированным файлом json

То же самое с патчем, я на самом деле не забочусь об анализе тела, просто использую совпадение URL-адреса, чтобы предоставить правильный предопределенный ответ, это не создало проблем, поскольку URL-адрес намного проще, и решения, которые я нашел, поддерживают этот тип URL:

ИСПРАВЛЕНИЕ http://localhost:PORTNUMBER/api/projects/500

Есть ли какое-либо решение, в котором я могу настроить свои конечные точки в качестве URL-адреса для запроса GET? Те, которые я нашел, выдают мне неправильную ошибку пути из-за ?include... части URL-адреса, поскольку они обслуживают только такие вещи, как PATH/PATH/RESOURCE, но когда дело доходит до PATH/PATH/ РЕСУРС? любой-странный-адрес-мне-нужен, тогда это вызывает проблему, пока мне просто нужно что-то «столь же простое».

Я попробовал это самостоятельно, используя node.js:

// app.js, my main file
var express = require("express");
var bodyParser = require("body-parser");
var app = express();

// configuring the body parser to accept JSON as well as url encoded values
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json({
  type: ['application/json', 'application/vnd.api+json']
}));

var routes = require("./routes/routes.js")(app);

var server = app.listen(3000, function () {
    console.log("Listening on port %s...", server.address().port);
});

В маршрутах я определяю это:

// inside /routes/routes.js
var appRouter = function(app) {
// only works if I let it like "api/projects/1000"
  app.get("api/projects/1000?include=subtree,subtree.vertices,vertices",   function(req, res) {
    res.set('Content-Type', 'application/vnd.api+json');
    res.send({-----here goes my json response-----});
  });
}

module.exports = appRouter;

person sab    schedule 16.10.2018    source источник
comment
Рассматривали ли вы возможность использования pretenderjs?   -  person jelhan    schedule 17.10.2018
comment
Привет @jelhan! Я только что взглянул на это, и это кажется полезным для другой идеи, которую я имел в виду, но дело в том, что мне нужно запустить поддельный сервер в контейнере Docker, поэтому Front, который находится в другом контейнере, действительно думает, что делает то же самое вещи, чем это было бы с внутренним API, который будет реализован позже, json-server не хватает некоторых простых вещей, которые мне нужны, а также всех других инструментов, которые я нашел, в конце я написал свой собственный и работает для моих нужд, я буду полировать это и поделиться им позже, вероятно, когда у меня будет больше времени.   -  person sab    schedule 18.10.2018


Ответы (1)


Удалось это сделать, тогда вместо того, что у меня было в app.get, я использовал:

app.get("api/projects/1000", function(req, res) {
  res.set('Content-Type', 'application/vnd.api+json');
  if(!req.query.include){
    res.send(---whatever response when the url doesn't have include---)
    return;
  }
  res.send({-----here goes my json response when it has include-----});
});

Возможно, это не самая приятная вещь в мире, но отсюда вы можете настроить ее на отправку ранее написанных файлов json или всего, что вам нужно, точно скорректированного для ваших нужд, если у кого-то есть предложение в качестве лучшего ответа, не стесняйтесь комментировать :)

person sab    schedule 16.10.2018