Changes for page ERRest In Depth
Last modified by Pascal Robert on 2012/06/10 16:01
From version 26.1
edited by Pascal Robert
on 2012/03/11 20:51
on 2012/03/11 20:51
Change comment:
There is no comment for this version
To version 32.1
edited by Pascal Robert
on 2012/06/10 12:21
on 2012/06/10 12:21
Change comment:
There is no comment for this version
Summary
-
Page properties (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -1,13 +1,146 @@ 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 +ERXRestUtils 20 + 1 1 request > route 2 2 23 +{{code}} 24 + 25 + /** 26 + * A NameFormat that behaves like Rails -- plural entities, plural routes, lowercase underscore names 27 + * (names_like_this). 28 + */ 29 + public static NameFormat RAILS = new NameFormat(true, true, NameFormat.Case.LowercaseUnderscore); 30 + 31 + /** 32 + * A NameFormat that behaves like WO -- singular entities, singular routes, camel names (NamesLikeThis). 33 + */ 34 + public static NameFormat WO = new NameFormat(false, false, NameFormat.Case.CamelCase); 35 + 36 + /** 37 + * A NameFormat that behaves like WO -- singular entities, singular routes, lowercase camel names (namesLikeThis). 38 + */ 39 + public static NameFormat WO_LOWER = new NameFormat(false, false, NameFormat.Case.LowerCamelCase); 40 + 41 +{{/code}} 42 + 43 +* ERXRestContext 44 +** contains the editing context and an userInfo dictionnary 45 +** will be populated with er.rest.dateFormat, er.rest.timestampFormatter and er.rest.timestampFormat (read only for non-HTML responses) 46 +*** want to change the time format for a specific controller? 47 + 48 +{{code}} 49 + 50 +protected ERXRestContext createRestContext() { 51 + ERXRestContext restContext = new ERXRestContext(editingContext()); 52 + restContext.setUserInfoForKey("yyyy-MM-dd", "er.rest.dateFormat"); 53 + restContext.setUserInfoForKey("yyyy-MM-dd", "er.rest.timestampFormat"); 54 + return restContext; 55 + } 56 + 57 +{{/code}} 58 + 59 +* 60 +** you just need to override createRestContext() in your controller if you want to add other stuff to the context (a user, etc.) 61 +* Properties 62 +** ERXRest.idKey (ERXRestFormatDelegate) 63 +*** (default "id") Override this property if you want to use a different key for the 'id' attribute** ERXRest.typeKey** 64 +** ERXRest.nilKey (ERXRestFormatDelegate) 65 +** ERXRest.writeNilKey (ERXRestFormatDelegate) 66 +** ERXRest.pluralEntityNames (ERXRestFormatDelegate) 67 +** ERXRest.writeTypeKey (ERXRestFormatDelegate) 68 +** ERXRest.suppressTypeAttributesForSimpleTypes (ERXXmlRestWriter) 69 +*** (default "false") If set to true, primitive types, like type = "datetime", won't be added to the output 70 +** ERXRest.strictMode 71 +*** In ERXMissingRouteController: (default "true") If set to true, status code in the response will be 405 Not Allowed, if set to false, status code will be 404 Not Found 72 +*** In ERXRouteController: (default "true") If set to true, status code in the response will be 405 Not Allowed, if set to false, status code will be 404 Not Found 73 +*** ERXRouteResults: (default "true") If set to true, creating a ressource will return status code 201 Created, if set to false, will return 200 OK 74 +** ERXRest.pluralEntityNames (ERXRouteRequestHandler) 75 +** ERXRest.routeCase (ERXRouteRequestHandler) 76 +** ERXRest.lowercaseEntityNames (ERXRouteRequestHandler) 77 +** ERXRest.parseUnknownExtensions (ERXRouteRequestHandler) 78 +*** (default "true") If set to "false", will return a 404 status code if the format doesn't exist 79 +** ERXRest.missingControllerName (ERXRouteRequestHandler) 80 +*** (default "ERXMissingRouteController") Allow you to specify which controller to use when a route doesn't exist 81 +** er.rest.rfcDateFormat 82 +** er.rest.dateFormat 83 +** er.rest.dateFormat.primary 84 +** er.rest.dateFormat.secondary 85 +** er.rest.dateFormatter 86 +** er.rest.timestampFormat 87 +** er.rest.timestampFormat.primary 88 +** er.rest.timestampFormat.secondary 89 +** er.rest.timestampFormatter 90 +** er.rest.rfcDateFormat 91 +** er.rest.jodaTime 92 +** ERXRest.transactionsEnabled (default 'false') ERXRestTransactionRequestAdaptor 93 +** ERXRest.maxEventsPerTransaction (default '50') ERXRestTransactionRequestAdaptor 94 +** ERXRest.accessControlAllowRequestHeaders (ERXRouteController) 95 +** ERXRest.accessControlAllowRequestMethods (ERXRouteController) 96 +** ERXRest.defaultFormat (ERXRouteController) 97 +*** (default "xml") Allow you to set the default format for all of your REST controllers 98 +** ERXRest.allowWindowNameCrossDomainTransport (ERXRouteController) 99 +** ERXRest.accessControlMaxAge (ERXRouteController) 100 +*** (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. 101 +** ERXRest.accessControlAllowOrigin (ERXRouteController) 102 +*** Set the value to '**' to enable all origins. See [[https://developer.mozilla.org/En/HTTP_access_control#Access-Control-Allow-Origin]]** 103 +* JSON Schema 104 +** {{code}} 105 +/something?schema=true 106 + 107 +public WOActionResults indexAction() { 108 +if (isSchemaRequest()) { 109 + return schemaResponse(showFilter()); 110 +} 111 +protected boolean isSchemaRequest() { 112 + return request().stringFormValueForKey("schema") != null; 113 +} 114 +{{/code}} 115 + 3 3 Application(ERXApplication).dispatchRequest(WORequest) line: 2051 4 4 ERXRouteRequestHandler(WOActionRequestHandler).//handleRequest(WORequest) line: 221 5 -ERXRouteRequestHandler.getRequestHandlerPathForRequest(WORequest) line: 782 118 +ERXRouteRequestHandler.getRequestHandlerPathForRequest(WORequest) line: 782// 6 6 7 -ERXRouteRequestHandler(WOActionRequestHandler).//handleRequest(WORequest) line: 259 8 -PagesController(ERXRouteController).performActionNamed(String) line: 1328 9 -PagesController(ERXRouteController).performActionNamed(String, boolean) line: 1385 10 -PagesController(ERXRouteController).performRouteActionNamed(String) line: 1510 11 -PagesController(ERXRouteController).performActionWithArguments(Method, Object...) line: 1559 120 +ERXRouteRequestHandler(WOActionRequestHandler).//handleRequest(WORequest) line: 259 121 +PagesController(ERXRouteController).performActionNamed(String) line: 1328 122 +PagesController(ERXRouteController).performActionNamed(String, boolean) line: 1385 123 +PagesController(ERXRouteController).performRouteActionNamed(String) line: 1510 124 +PagesController(ERXRouteController).performActionWithArguments(Method, Object...) line: 1559 12 12 ... 13 -PagesController.mainPageAction() line: 20 // 126 +PagesController.mainPageAction() line: 20// 127 + 128 +== ERXRouteRequestHandler == 129 + 130 +| **Properties** 131 +| ERXRest.missingControllerName | (default "ERXMissingRouteController") 132 +\\ 133 +| ERXRest.parseUnknownExtensions | ERXRest.parseUnknownExtensions 134 +\\ 135 +| ERXRest.pluralEntityNames | ERXRest.pluralEntityNames 136 +\\ 137 +| ERXRest.routeCase | ERXRest.routeCase 138 +\\ 139 +| ERXRest.lowercaseEntityNames | ERXRest.lowercaseEntityNames 140 + 141 +ERXMissingRouteController is the controller that is used when no route can be found. It's "missing" action is loaded. 142 + 143 +| **Properties** 144 +| ERXRest.strictMode | ERXRest.strictMode 145 +\\ | 146 +ERXRouteController