Changes for page ERRest In Depth
Last modified by Pascal Robert on 2012/06/10 16:01
From version 45.1
edited by Pascal Robert
on 2012/06/10 16:01
on 2012/06/10 16:01
Change comment:
There is no comment for this version
To version 44.1
edited by Pascal Robert
on 2012/05/02 21:09
on 2012/05/02 21:09
Change comment:
There is no comment for this version
Summary
-
Page properties (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -1,155 +153,3 @@ 1 -General architecture 2 -Same Origin policy 3 -Transactions 4 -HTML vs other formats 5 -Response representation 6 -Missing route 7 -Missing object 8 -POJO objects 9 -Headers 10 -Caching 11 -Adding new format 12 -Security 13 -strictMode 14 -Workflow 15 -Query arguments and RXRestFetchSpecification 16 -ERXRestNameRegistry 17 -MapClassDescription / NSDictionaryClassDescription 18 - 19 -Calling an action goes like this: 20 - 21 -{{code}} 22 - 23 -Application.dispatchRequest -> 24 -ERXRouteRequestHandler.handleRequest -> 25 -ERXRouteRequestHandler._handleRequest -> 26 -RestEntitiesController(ERXRouteController).performActionNamed(String actionName, false throwExceptions) -> 27 -RestEntitiesController(ERXRouteController).performRouteActionNamed -> RestEntitiesController(ERXRouteController).performActionWithArguments(Method, Object...) -> 28 -Method.invoke -> ... 29 -RestEntitiesController.indexAction() 30 - 31 -{{/code}} 32 - 33 -performActionNamed: 34 - 35 -{{code}} 36 - 37 -if (transactionAdaptor.transactionsEnabled() && !transactionAdaptor.isExecutingTransaction(context(), request())) { 38 - if (!transactionAdaptor.willHandleRequest(context(), request())) { 39 - if (transactionAdaptor.didHandleRequest(context(), request())) { 40 - results = stringResponse("Transaction request enqueued."); 41 - } else { 42 - results = stringResponse("Transaction executed."); 43 - } 44 - } 45 -} 46 - 47 -if (results == null) { 48 - checkAccess(); 49 -} 50 - 51 -if (results == null && isAutomaticHtmlRoutingEnabled() && format() == ERXRestFormat.html()) { 52 - results = performHtmlActionNamed(actionName); 53 -} 54 - 55 -if (results == null) { 56 - results = performRouteActionNamed(actionName); 57 -} 58 - 59 -if (results == null) { 60 - results = response(null, ERXKeyFilter.filterWithAttributes()); 61 -} 62 -else if (results instanceof IERXRouteComponent) { 63 - _takeRouteParametersFromRequest(results); 64 -} 65 - 66 -{{/code}} 67 - 68 -ERXRouteController.checkAccess() 69 - 70 -Will do nothing by default. Override it to check for security. 71 - 72 -{{code}} 73 - 74 -protected void checkAccess() throws SecurityException { 75 -} 76 - 77 -{{/code}} 78 - 79 -ERXRouteController.performHtmlActionNamed 80 - 81 -{{code}} 82 - 83 - protected WOActionResults performHtmlActionNamed(String actionName) throws Exception { 84 - WOActionResults results = null; 85 - 86 - String pageName = pageNameForAction(actionName); 87 - if (_NSUtilities.classWithName(pageName) != null) { 88 - try { 89 - results = pageWithName(pageName); 90 - if (!(results instanceof IERXRouteComponent)) { 91 - log.error(pageName + " does not implement IERXRouteComponent, so it will be ignored."); 92 - results = null; 93 - } 94 - } 95 - catch (WOPageNotFoundException e) { 96 - log.info(pageName + " does not exist, falling back to route controller."); 97 - results = null; 98 - } 99 - } 100 - else { 101 - log.info(pageName + " does not exist, falling back to route controller."); 102 - } 103 - 104 - if (results == null && shouldFailOnMissingHtmlPage()) { 105 - results = performUnknownAction(actionName); 106 - } 107 - 108 - return results; 109 - } 110 - 111 -{{/code}} 112 - 113 -{{code}} 114 - 115 - protected String pageNameForAction(String actionName) { 116 - return entityName() + ERXStringUtilities.capitalize(actionName) + "Page"; 117 - } 118 - 119 -{{/code}} 120 - 121 -{{code}} 122 - 123 - protected boolean shouldFailOnMissingHtmlPage() { 124 - return false; 125 - } 126 - 127 -{{/code}} 128 - 129 -ERXRestUtils 130 - 131 -request > route 132 - 133 -{{code}} 134 - 135 -/** 136 - * A NameFormat that behaves like Rails -- plural entities, plural routes, lowercase underscore names 137 - * (names_like_this). 138 - */ 139 - public static NameFormat RAILS = new NameFormat(true, true, NameFormat.Case.LowercaseUnderscore); 140 - 141 - /** 142 - * A NameFormat that behaves like WO -- singular entities, singular routes, camel names (NamesLikeThis). 143 - */ 144 - public static NameFormat WO = new NameFormat(false, false, NameFormat.Case.CamelCase); 145 - 146 - /** 147 - * A NameFormat that behaves like WO -- singular entities, singular routes, lowercase camel names (namesLikeThis). 148 - */ 149 - public static NameFormat WO_LOWER = new NameFormat(false, false, NameFormat.Case.LowerCamelCase); 150 - 151 -{{/code}} 152 - 153 153 * ERXRestContext 154 154 ** contains the editing context and an userInfo dictionnary 155 155 ** will be populated with er.rest.dateFormat, er.rest.timestampFormatter and er.rest.timestampFormat (read only for non-HTML responses) ... ... @@ -198,18 +198,8 @@ 198 198 ** er.rest.timestampFormat.secondary 199 199 ** er.rest.timestampFormatter 200 200 ** er.rest.rfcDateFormat 201 -** er.rest.jodaTime 202 -** ERXRest.transactionsEnabled (default 'false') ERXRestTransactionRequestAdaptor 203 -** ERXRest.maxEventsPerTransaction (default '50') ERXRestTransactionRequestAdaptor 204 -** ERXRest.accessControlAllowRequestHeaders (ERXRouteController) 205 -** ERXRest.accessControlAllowRequestMethods (ERXRouteController) 206 -** ERXRest.defaultFormat (ERXRouteController) 207 -*** (default "xml") Allow you to set the default format for all of your REST controllers 208 -** ERXRest.allowWindowNameCrossDomainTransport (ERXRouteController) 209 -** ERXRest.accessControlMaxAge (ERXRouteController) 210 -*** (default 1728000) This header indicates how long the results of a preflight request can be cached. For an example of a preflight request, see the above examples. 211 -** ERXRest.accessControlAllowOrigin (ERXRouteController) 212 -*** Set the value to '**' to enable all origins. See [[https://developer.mozilla.org/En/HTTP_access_control#Access-Control-Allow-Origin]]** 49 +** ERXRest.transactionsEnabled 50 +** ERXRest.maxEventsPerTransaction 213 213 * JSON Schema 214 214 ** {{code}} 215 215 /something?schema=true ... ... @@ -223,6 +223,31 @@ 223 223 } 224 224 {{/code}} 225 225 64 +Same Origin policy 65 +Transactions 66 +HTML vs other formats 67 +Response representation 68 +Missing route 69 +Missing object 70 +POJO objects 71 +Headers 72 +Caching 73 +Adding new format 74 +Security 75 +strictMode 76 +Workflow 77 +Query arguments and RXRestFetchSpecification 78 +ERXRestNameRegistry 79 +MapClassDescription / NSDictionaryClassDescription 80 + 81 +ERXRestUtils 82 +Properties 83 +er.rest.dateFormat 84 +er.rest.timestampFormat 85 +er.rest.rfcDateFormat 86 + 87 +request > route 88 + 226 226 Application(ERXApplication).dispatchRequest(WORequest) line: 2051 227 227 ERXRouteRequestHandler(WOActionRequestHandler).//handleRequest(WORequest) line: 221 228 228 ERXRouteRequestHandler.getRequestHandlerPathForRequest(WORequest) line: 782// ... ... @@ -254,3 +254,13 @@ 254 254 | ERXRest.strictMode | ERXRest.strictMode 255 255 \\ | 256 256 ERXRouteController 120 + 121 +Properties 122 + 123 +ERXRest.accessControlAllowRequestHeaders 124 +ERXRest.accessControlAllowRequestMethods 125 +ERXRest.defaultFormat 126 +ERXRest.strictMode 127 +ERXRest.allowWindowNameCrossDomainTransport 128 +ERXRest.accessControlMaxAge 129 +ERXRest.accessControlAllowOrigin