Для запуску SaaS, в якому я беру участь, я будую як веб-API RESTful, так і кілька клієнтських програм на різних платформах, які його споживають. Я думаю, що я зрозумів API, але зараз я звертаюся до клієнтів. Коли я читав про REST, я бачу, що ключовою частиною REST є відкриття , але, здається, існує багато суперечок між двома різними трактуваннями того, що насправді означає відкриття:
Виявлення розробника : розробник кодує велику кількість деталей API у клієнт, таких як URI ресурсу, параметри запиту, підтримувані методи HTTP та інші деталі, які вони виявили під час перегляду документів та експериментів з відповідями API. Цей тип виявлення IMHO вимагає крутого зв’язування та питання версії API, а також призводить до жорсткого зв’язку коду клієнта з API. Не набагато краще, ніж при використанні добре задокументованої колекції RPC, здається.
Виявлення середовища виконання - Клієнтський додаток сам може зрозуміти все, що йому потрібно, з невеликою кількістю інформації, що не входить до діапазону, або взагалі без неї (можливо, лише знання про типи носіїв, з якими API працює). Але для того, щоб зробити API дуже ефективним, здається, потрібно багато шаблонів посилань для параметрів запиту, що змушує інформацію про позасмугову мережу повертатися назад. Можливо, існують інші труднощі, про які я ще не думав, оскільки ще не дійшов до цієї точки розвитку. Але мені подобається ідея вільного зчеплення.
Виявлення часу роботи, здається, є святим Граалем REST, але я бачу дорогоцінну дискусію про те, як реалізувати такого клієнта. Майже всі джерела REST, які я знайшов, припускають відкриття розробника. Хтось знає про деякі ресурси пошуку під час виконання? Кращі практики? Приклади чи бібліотеки з реальним кодом? Я працюю в PHP (Zend Framework) для одного клієнта. Objective-C (iOS) для іншого.
Чи є реалізація Runtime реальною метою, враховуючи наявний набір інструментів та знань у спільноті розробників? Я можу написати своєму клієнту, щоб він непрозоро обробляв усі URI, але як це зробити найефективніше - це питання, особливо щодо низькосмугових з’єднань. У будь-якому випадку, URI - це лише частина рівняння. А як щодо шаблонування посилань у контексті виконання? Як щодо того, щоб повідомити, які методи підтримуються, крім того, щоб зробити багато запитів OPTIONS?