Недавно мне потребовалось обновить службы REST программно, а не через CF Admin. Конечно, вы можете сделать это через администратора CF…

Но мне нужно было сделать это как с помощью страницы в моем браузере, так и с помощью запланированной задачи. Я нашел функцию, которая широко не используется, но это именно то, что мне нужно в данном случае. Функция в restInitApplication (). Эта функция используется как альтернатива созданию и обновлению служб REST через графический интерфейс администратора CF. Документацию ACF для функции можно найти здесь: https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-m-r/restinitapplication.html. Функция доступна только в CF10 и новее. Все очень просто. Если у вас уже есть службы REST, зарегистрированные в CF Admin, то при повторном использовании функции просто выполняется обновление. В противном случае функция зарегистрирует корневой путь и предоставленное вами отображение службы. Например, следующий код…

<cfset RestInitApplication("C:/ColdFusion10/cfusion/wwwroot/restexample/", "restexample")>

создаст эту новую службу…

Теперь, когда вы снова вызываете функцию с теми же параметрами, она обновляет вместо того, чтобы создавать службу. Особо следует отметить, что функция не возвращает никакого значения. Таким образом, вы не можете установить переменную, равную функции в вашем операторе ‹cfset›.

This works: <cfset RestInitApplication("C:/ColdFusion10/cfusion/wwwroot/restexample/", "restexample")> This fails: <cfset tmpRest = RestInitApplication("C:/ColdFusion10/cfusion/wwwroot/restexample/", "restexample")>

Чтобы иметь возможность обновляться, вызывая страницу в браузере, я просто написал этот небольшой фрагмент кода:

<!--- refreshREST.com ---> <cftry> <cfset reset = restInitApplication(getDirectoryFromPath(getCurrentTemplatePath()),"restexample")> <cfcatch type="any"> <cfdump var="#cfcatch#"> </cfcatch> </cftry> Successfull!!

Вы заметите, что для большей надежности я использовал getDirectoryFromPath (getCurrentTemplatePath ()) вместо жесткого кодирования каталога. Таким образом, я могу использовать тот же фрагмент кода для других сопоставлений REST. Что вы можете сделать, так это поместить код в ту же папку, что и ваши службы REST, если вы хотите сохранить его вместе со службами REST, которые обновляет код.

Наконец, с сохраненным кодом обновления вы можете легко вызвать его через запланированную задачу, если хотите, чтобы ваши службы REST постоянно обновлялись автоматически.

Вот и все! Довольно простое решение того, что сначала было проблемой, пока я не нашел функцию.