Сопоставитель пользовательских запросов для SEOMOZ + VCR

Я пытаюсь интегрировать SEOMOZ API с видеомагнитофоном.

Поскольку запрос API к SEOMOZ содержит параметры, которые со временем меняются для одного и того же запроса, мне нужно реализовать собственный сопоставитель.

Вот как выглядит мой вызов API:

http://lsapi.seomoz.com/linkscape/url-metrics/#{self.url}?Cols=#{cols}&AccessID=#{moz_id}&Expires=#{expires}&Signature=#{url_safe_signature} 

Я также звоню другим конечным точкам, таким как Twitter, Facebook и т. Д. И т. Д. Для которых сопоставление по умолчанию хорошо справляется со своей задачей.

Как я могу переопределить поведение сопоставления только для SEOMOZ. Также по каким параметрам я должен лучше всего соответствовать запросу в этом случае.


person Nitish Upreti    schedule 09.05.2013    source источник


Ответы (2)


Вам нужно сопоставить все параметры, кроме подписи и срока действия.

Другой вариант, который вы можете рассмотреть (мы используем его внутри при использовании видеомагнитофона с такого рода API), — записать время теста в файл с кассетами и использовать Timecop или что-то подобное, чтобы убедиться, что вы повторно запускаете записанное. тестируйте в «одно и то же время» каждый раз, когда вы его запускаете.

person Tithonium    schedule 09.05.2013

Вы можете использовать VCR.request_matchers.uri_without_params пользовательский сопоставитель, см. https://relishapp.com/vcr/vcr/v/2-5-0/docs/request-matching/uri-without-param-s

Вы бы использовали это так в вашем случае:

VCR.configure do |c|
  # ...
  c.default_cassette_options = {
    # ...

    # the default is: match_requests_on: [:method :uri]
    match_requests_on: [:method, VCR.request_matchers.uri_without_params(:Signature, :Expires)]
  }
end
person severin    schedule 25.07.2013