|
Вопрос по алгоритму повтора процедуры
|
|||
---|---|---|---|
#18+
Есть веб-сервис, работа с которым организована следующим образом. Перед началом работ необходимо запросить с сервиса токен доступа. Токен доступа действует несколько часов. После того, как токен доступа получен, у сервиса можно вызывать определенные методы. Если метод по какой-либо причине выполнить нельзя, то возвращается ошибка; в том числе ошибка будет возвращена при использовании недействительного токена. По умолчанию токен действует 6 часов, у меня токен кешируется на 4 часа, чтобы повторный получать досрочно. Но иногда на сервере текущие токены сбрасываются, и тогда закешированные токены становятся недействующими досрочно. Метода проверки токена на сервисе не предусмотрено, о недействительном токене можно узнать только если попробовать с его помощью вызвать какой-либо метод. Структурно взаимодействие с сервисом сделано так: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73.
Методы сервиса доступны как методы классов (метод auth и прочие), которые в свою очередь вызывают внутренний метод http. Сейчас внутри http обрабатывается специфичная ошибка и в случае просроченного токена он запрашивается повторно и http повторяется. Или лучше проверку и повтор вынести во внешние методы (которые будут анализировать результат http и в случае просроченного токена получать новый и повторять запрос)? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 12:35 |
|
Вопрос по алгоритму повтора процедуры
|
|||
---|---|---|---|
#18+
Alibek B.Или лучше проверку и повтор вынести во внешние методы (которые будут анализировать результат http и в случае просроченного токена получать новый и повторять запрос)?Сходу как-то не понятно, чем именно оно может быть лучше. Если только в разных методах должна быть разная обработка... Но об этом нет информации. Насколько понимаю, один и тот же токен используется в разных методах класса. Тогда какая разница, в том или в другом методе проявилась проблема? Способ обнаружения и устранения проблемы один. Если по какой-то причине очень не хочется держать проверялку-обновлялку именно в методе http(), так можно вынести код в какой-то приватный метод (или несколько, если алгоритмы сильно разные) и вызывать его по необходимости. А если токен используется и одинаково восстанавливается во множестве классов, так и вовсе можно вынести код в базовый класс, от которого эти классы будут наследоваться. ИМХО конечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 14:03 |
|
Вопрос по алгоритму повтора процедуры
|
|||
---|---|---|---|
#18+
Разница в том, что в одном случае вызов http выполняется рекурсивно, в другом случае во внешнем цикле. Есть ли тут какая-то заметная разница? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 14:06 |
|
Вопрос по алгоритму повтора процедуры
|
|||
---|---|---|---|
#18+
Тнехнически - не вижу проблем. Насколько понимаю, рекурсия вглубь лишь на один уровень ныряет. Логически же получается в некотором смысле непорядочек. Если правильно понимаю, рекурсия тут не нужна, достаточно запустить повторно curl_exec() с новым токеном. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 17:28 |
|
Вопрос по алгоритму повтора процедуры
|
|||
---|---|---|---|
#18+
авторМетода проверки токена на сервисе не предусмотрено, о недействительном токене можно узнать только если попробовать с его помощью вызвать какой-либо метод. в методе проверки нет никакого смысла, т.к. результат имеет смысл только на момент вызова метода, нет гарантии, что валидный, в один момент, токен не протухнет к моменту вызова след метода. авторСейчас внутри http обрабатывается специфичная ошибка и в случае просроченного токена он запрашивается повторно и http повторяется. Или лучше проверку и повтор вынести во внешние методы (которые будут анализировать результат http и в случае просроченного токена получать новый и повторять запрос)? я бы не стал смешивать логику вызова и логику потора и вынес ее повыше. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2019, 07:47 |
|
Вопрос по алгоритму повтора процедуры
|
|||
---|---|---|---|
#18+
Дегтярев Евгенийв методе проверки нет никакого смысла, т.к. результат имеет смысл только на момент вызова метода, нет гарантии, что валидный, в один момент, токен не протухнет к моменту вызова след метода. Смысл вполне практичный — упростить обработку вызова и ошибок. Это как валидация полей формы на клиенте — на сервере это все-равно проверяется, но дополнительный контроль на клиенте сделает это более удобным и понятным для пользователя. В случае с веб-сервисом пользователем является мой скрипт. Дегтярев Евгенийя бы не стал смешивать логику вызова и логику потора и вынес ее повыше. Да, аргумент. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2019, 09:22 |
|
Вопрос по алгоритму повтора процедуры
|
|||
---|---|---|---|
#18+
vkleЛогически же получается в некотором смысле непорядочек. Если правильно понимаю, рекурсия тут не нужна, достаточно запустить повторно curl_exec() с новым токеном. Да, если упростить, то именно так. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2019, 09:23 |
|
Вопрос по алгоритму повтора процедуры
|
|||
---|---|---|---|
#18+
Alibek B.Смысл вполне практичный — упростить обработку вызова и ошибок. Это как валидация полей формы на клиенте — на сервере это все-равно проверяется, но дополнительный контроль на клиенте сделает это более удобным и понятным для пользователя. В случае с веб-сервисом пользователем является мой скрипт. а я говорю про то что наличие такого метода ничего не упрощает, т.к. между вызовом метода проверки, который скаал - ок, и следующим вызовом метода, токен может протухнуть, а следовательно проверки на предмет ошибок невалидного токена никуда не денуться ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2019, 10:05 |
|
Вопрос по алгоритму повтора процедуры
|
|||
---|---|---|---|
#18+
Дегтярев Евгениймежду вызовом метода проверки, который скаал - ок, и следующим вызовом метода, токен может протухнуть, а следовательно проверки на предмет ошибок невалидного токена никуда не денуться Упрощение в том, что подобная ситуация будет маловероятной и проверка будет намного проще — вместо запроса нового токена и повтора запроса будет просто фиксироваться сбой метода. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2019, 09:42 |
|
Вопрос по алгоритму повтора процедуры
|
|||
---|---|---|---|
#18+
Редактировать нельзя, поэтому поясню в отдельном сообщении. Ранее алгоритм работы скрипта был следующий: 1. Скрипт получает токен из кеша и проверяет срок его действия (по умолчанию токен действует 6 часов с момента получения). 2. Если срок истек, то скрипт получает новый токен и кеширует его. 3. Затем используя полученный токен (из кеша или новый) скрипт вызывает метод веб-сервиса. Если по какой-то причине токен завершил свое действие досрочно (например на сервере сбросили все токены), то скрипт пропускает пункт 2, а на пункте 3 при попытке выполнения метода фиксирует в логе ошибку. Первоначально предполагалось, что подобный досрочный сброс токенов это ситуация исключительно редкая, поэтому подобные ошибки будут обрабатываться вручную. Но оказалось, что они возникают достаточно часто (минимум раз в неделю), поэтому и пришлось эту ситуацию автоматизировать. Если бы у веб-сервиса был метод, позволяющий проверить валидность токена (или срок его действия), то можно было бы вернуться к предыдущей схеме — между проверкой токена и вызовом метода проходят секунды и вероятность сброса токена в этом периоде была бы крайне малой. И соответственно, ввиду редкости подобного события никакой специальной обработки программировать бы не пришлось, в логе бы просто фиксировался сбой вызова метода с последующим ручным разбором причин. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2019, 09:50 |
|
Вопрос по алгоритму повтора процедуры
|
|||
---|---|---|---|
#18+
то что вам так проще еще не значит что это правильно авторЕсли бы у веб-сервиса был метод, позволяющий проверить валидность токена (или срок его действия) для начала можно поразмышлять на тему почему авторы сервиса не предоставили такой метод ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2019, 10:37 |
|
|
start [/forum/topic.php?fid=23&fpage=16&tid=1459958]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 304ms |
total: | 423ms |
0 / 0 |