Недостатки API, который игнорирует http метод и путь - PullRequest
0 голосов
/ 22 января 2020

Мне интересно, каковы будут недостатки для производственного сервера, API которого полностью не знает пути HTTP-запроса. Например, API, который полностью определяется параметрами запроса или даже полностью определяется телом http.

let server = require('http').createServer(async (req, res) => {

  let { headers, method, path, query, body } = await parseRequest(res);

  // `headers` is an Object representing headers
  // `method` is 'get', 'post', etc.
  // `path` could look like /api/v2/people
  // `query` could look like { filter: 'age>17&age<35', page: 7 }
  // `body` could be some (potentially large) http body

  // MOST apis would use all these values to determine a response...
  // let response = determineResponse(headers, method, path, query, body);

  // But THIS api completely ignores everything except for `query` and `body`
  let response = determineResponse(query, body);

  doSendResponse(res, response); // Sets response headers, etc, sends response

});

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

method  path                   description

GET     /api                   - Metadata about api
GET     /api/v1                - Old version of api
GET     /api/v2                - Current api
GET     /api/v2/people         - Make "people" db queries
POST    /api/v2/people         - Insert a new person into db
GET     /api/v2/vehicles       - Make "vehicle" db queries
POST    /api/v2/vehicles       - Insert a new vehicle into db
.
.
.

Этот API учитывает только URL-запросы и выглядит совсем иначе:

url query                                 description

<empty>                                   - Metadata about api
apiVersion=1                              - Old version of api
apiVersion=2                              - Current api
apiVersion=2&table=people&action=query    - Make "people" db queries
apiVersion=2&table=people&action=insert   - Add new people to db
.
.
.

Реализация такого рода API, и обеспечение того, чтобы клиенты использовали правильную схему API, не обязательно является проблемой. Вместо этого я задаюсь вопросом о , какие еще проблемы могут возникнуть для моего приложения из-за написания API с такой схемой .

  • Было бы это вредно для SEO?
  • Будет ли это вредно для производительности? (кэширование?)
  • Существуют ли дополнительные проблемы, возникающие, когда API не знает метода и пути URL?

1 Ответ

1 голос
/ 22 января 2020

Это действительно очень необычно, но в основном это то, как будет работать веб-API RP C.

Насколько я знаю, не было бы никаких проблем с SEO. Производительность / кэширование должны быть одинаковыми, так как полный «путь» в конце состоит из тех же параметров.

Однако было бы сложно использовать все, что не ожидает (маршрутизатор express , причудливые клиенты http, et c.).

Единственное принципиальное отличие, которое я вижу, заключается в том, как браузеры обрабатывают запросы POST как особые (например, никогда не будут создаваться только с помощью ссылки), и ваш API будет выставить удаление / создание данных просто со ссылкой. Это более или менее опасно в зависимости от вашего сценария.

Мой совет: не делайте этого, придерживайтесь стандартов, если у вас нет очень веских причин не делать этого.

...