Несоответствие фреймворков ColdFusion MVC и RESTful Service? - PullRequest
3 голосов
/ 02 июня 2010

Большинство CF MVC Frameworks используют шаблон фронт-контроллера. Обычно плагин Search Engine Safe (SES) вместе с URL Rewrite используются для создания дружественных URL. Однако, когда дело доходит до реализации сервисов RESTful, использование инфраструктуры MVC выглядит как слой сложности, добавленный поверх другого уровня сложности.

Как можно приручить этого зверя? Любой хороший и чистый подход поддержки RESTful сервисов с ColdFusion? Есть ли какая-либо инфраструктура MVC, которая может легко предоставлять сервисы RESTful?

Спасибо

Ответы [ 7 ]

3 голосов
/ 04 июня 2010

ColdBox уже давно поддерживает RESTful URL. В версии 3.0 вы даже можете разделять входящие HTTP-глаголы для выполнения различных действий в приятной развязанной манере. читай здесь: http://blog.coldbox.org/post.cfm/coldbox-rest-enabled-urls

Вы даже можете очень легко обеспечить безопасность метода HTTP для ваших обработчиков событий:

component{

    this.allowedMethods = {
        LIST = "GET",
        SAVE = "POST,PUT"
    };
}
2 голосов
/ 03 июня 2010

Я пытался использовать PowerNap некоторое время назад, но мне показалось, что он не очень хорошо вписывается в то, что я делаю (создание API поверх существующего приложения). Мое решение было RESTfulCF : это фронт-контроллер, но не реализован полный MVC, потому что (как вы говорите) это излишне.

В настоящее время мы используем RESTfulCF для питания ряда (интенсивно используемых) внутренних систем на White Label Dating, и это работает как мечта, позволяя нам продолжить создание остальной части приложения отдельно от уровня API, который мы использовать, чтобы выставить только те системы, которые нам нужны.

2 голосов
/ 02 июня 2010

Я использовал Powernap (http://powernap.riaforge.com) для реализации веб-сервисов RESTful. Это не инфраструктура MVC, но я думаю, что она может работать вместе с любой платформой, которую вы сейчас используете в своем приложении.

1 голос
/ 02 июня 2010

Забавно, что вы должны спросить. Я фанат PowerNap , но я думал, что это можно сделать немного лучше другим способом, поэтому я запустил свой собственный фреймворк на прошлой неделе . Это по-прежнему каркас фронт-контроллера, поэтому все направляется через index.cfm (который легко удаляется с помощью перезаписи URL), но он построен специально для написания веб-сервисов RESTful. Он черпает вдохновение из PowerNap, а также FW / 1 .

Это все еще грубо, но работает. Прямо сейчас я бы назвал это доказательством концепции; но до того, как я назову его версией 1.0, не нужно далеко ходить. Я поместил некоторую информацию и источник на github.

Обновление от 23.08.2010: Официально на уровне 1,0 ! :)

1 голос
/ 02 июня 2010

Я использую MVC согласно шаблону PageController Фаулера для реализации служб REST. Один контроллер на ресурс, и контроллер реализует метод для каждого из поддерживаемых методов http. то есть GET, PUT, POST, DELETE.

Хорошо работает для меня. Единственная область, в которой мой подход отличается от стандартной интерпретации MVC, заключается в том, что моя модель действительно является моделью контента пользовательского интерфейса. Это не модель предметной области. Он может содержать элементы из доменной модели, но может также содержать другое содержимое.

0 голосов
/ 08 февраля 2011

Другим вариантом является Taffy (https://github.com/atuttle/Taffy). Добавьте один CFC на шаблон URI и определите метод для каждого метода HTTP, который вы хотите поддерживать (GET, PUT, DELETE и т. Д.).

<cfcomponent extends="taffy.core.resource" output="false"
             taffy_uri="/user/{userID}/stuff/{stuffID}/property/{propertyID}">

    <cffunction name="get" access="public" output="false">
            ...
    </cffunction>

    <cffunction name="post" access="public" output="false">
            ...
    </cffunction>

    <cffunction name="delete" access="public" output="false">
            ...
    </cffunction>
</cfcomponent>
0 голосов
/ 03 июня 2010

Ртуть не плохо! http://quicksilver.riaforge.org/

/**
* @url /hello/{text}
* @httpMethod GET
*/
public String function saySomething(required String text) {
return "Hello " & arguments.text;
}

Фактический URL:

index.cfm/hello/developer
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...