Changes for page ERRest In Depth

Last modified by Pascal Robert on 2012/06/10 16:01

From version 16.1
edited by Pascal Robert
on 2012/06/10 15:33
Change comment: There is no comment for this version
To version 23.1
edited by Pascal Robert
on 2012/05/02 16:16
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -1,104 +102,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 -
38 -if (transactionAdaptor.transactionsEnabled() && !transactionAdaptor.isExecutingTransaction(context(), request())) {
39 - if (!transactionAdaptor.willHandleRequest(context(), request())) {
40 - if (transactionAdaptor.didHandleRequest(context(), request())) {
41 - results = stringResponse("Transaction request enqueued.");
42 - } else {
43 - results = stringResponse("Transaction executed.");
44 - }
45 - }
46 -}
47 -
48 -if (results == null) {
49 - checkAccess();
50 -}
51 -
52 -if (results == null && isAutomaticHtmlRoutingEnabled() && format() == ERXRestFormat.html()) {
53 - results = performHtmlActionNamed(actionName);
54 -}
55 -
56 -if (results == null) {
57 - results = performRouteActionNamed(actionName);
58 -}
59 -
60 -if (results == null) {
61 - results = response(null, ERXKeyFilter.filterWithAttributes());
62 -}
63 -else if (results instanceof IERXRouteComponent) {
64 - _takeRouteParametersFromRequest(results);
65 -}
66 -
67 -{{/code}}
68 -
69 -checkAccess:
70 -
71 -{{code}}
72 -
73 -protected void checkAccess() throws SecurityException {
74 -}
75 -
76 -{{/code}}
77 -
78 -ERXRestUtils
79 -
80 -request > route
81 -
82 -{{code}}
83 -
84 -/**
85 - * A NameFormat that behaves like Rails -- plural entities, plural routes, lowercase underscore names
86 - * (names_like_this).
87 - */
88 - public static NameFormat RAILS = new NameFormat(true, true, NameFormat.Case.LowercaseUnderscore);
89 -
90 - /**
91 - * A NameFormat that behaves like WO -- singular entities, singular routes, camel names (NamesLikeThis).
92 - */
93 - public static NameFormat WO = new NameFormat(false, false, NameFormat.Case.CamelCase);
94 -
95 - /**
96 - * A NameFormat that behaves like WO -- singular entities, singular routes, lowercase camel names (namesLikeThis).
97 - */
98 - public static NameFormat WO_LOWER = new NameFormat(false, false, NameFormat.Case.LowerCamelCase);
99 -
100 -{{/code}}
101 -
102 102  * ERXRestContext
103 103  ** contains the editing context and an userInfo dictionnary
104 104  ** will be populated with er.rest.dateFormat, er.rest.timestampFormatter and er.rest.timestampFormat (read only for non-HTML responses)
... ... @@ -118,18 +118,14 @@
118 118  *
119 119  ** you just need to override createRestContext() in your controller if you want to add other stuff to the context (a user, etc.)
120 120  * Properties
121 -** ERXRest.idKey (ERXRestFormatDelegate)
122 -*** (default "id") Override this property if you want to use a different key for the 'id' attribute** ERXRest.typeKey**
123 -** ERXRest.nilKey (ERXRestFormatDelegate)
124 -** ERXRest.writeNilKey (ERXRestFormatDelegate)
125 -** ERXRest.pluralEntityNames (ERXRestFormatDelegate)
126 -** ERXRest.writeTypeKey (ERXRestFormatDelegate)
127 -** ERXRest.suppressTypeAttributesForSimpleTypes (ERXXmlRestWriter)
128 -*** (default "false") If set to true, primitive types, like type = "datetime", won't be added to the output
20 +** ERXRest.idKey
21 +** ERXRest.typeKey
22 +** ERXRest.nilKey
23 +** ERXRest.writeNilKey
24 +** ERXRest.pluralEntityNames
25 +** ERXRest.writeTypeKey
26 +** ERXRest.suppressTypeAttributesForSimpleTypes
129 129  ** ERXRest.strictMode
130 -*** 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
131 -*** 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
132 -*** ERXRouteResults: (default "true") If set to true, creating a ressource will return status code 201 Created, if set to false, will return 200 OK
133 133  ** ERXRest.pluralEntityNames (ERXRouteRequestHandler)
134 134  ** ERXRest.routeCase (ERXRouteRequestHandler)
135 135  ** ERXRest.lowercaseEntityNames (ERXRouteRequestHandler)
... ... @@ -147,18 +147,8 @@
147 147  ** er.rest.timestampFormat.secondary
148 148  ** er.rest.timestampFormatter
149 149  ** er.rest.rfcDateFormat
150 -** er.rest.jodaTime
151 -** ERXRest.transactionsEnabled (default 'false') ERXRestTransactionRequestAdaptor
152 -** ERXRest.maxEventsPerTransaction (default '50') ERXRestTransactionRequestAdaptor
153 -** ERXRest.accessControlAllowRequestHeaders (ERXRouteController)
154 -** ERXRest.accessControlAllowRequestMethods (ERXRouteController)
155 -** ERXRest.defaultFormat (ERXRouteController)
156 -*** (default "xml") Allow you to set the default format for all of your REST controllers
157 -** ERXRest.allowWindowNameCrossDomainTransport (ERXRouteController)
158 -** ERXRest.accessControlMaxAge (ERXRouteController)
159 -*** (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.
160 -** ERXRest.accessControlAllowOrigin (ERXRouteController)
161 -*** Set the value to '**' to enable all origins. See [[https://developer.mozilla.org/En/HTTP_access_control#Access-Control-Allow-Origin]]**
45 +** ERXRest.transactionsEnabled
46 +** ERXRest.maxEventsPerTransaction
162 162  * JSON Schema
163 163  ** {{code}}
164 164  /something?schema=true
... ... @@ -172,6 +172,31 @@
172 172  }
173 173  {{/code}}
174 174  
60 +Same Origin policy
61 +Transactions
62 +HTML vs other formats
63 +Response representation
64 +Missing route
65 +Missing object
66 +POJO objects
67 +Headers
68 +Caching
69 +Adding new format
70 +Security
71 +strictMode
72 +Workflow
73 +Query arguments and RXRestFetchSpecification
74 +ERXRestNameRegistry
75 +MapClassDescription / NSDictionaryClassDescription
76 +
77 +ERXRestUtils
78 +Properties
79 +er.rest.dateFormat
80 +er.rest.timestampFormat
81 +er.rest.rfcDateFormat
82 +
83 +request > route
84 +
175 175  Application(ERXApplication).dispatchRequest(WORequest) line: 2051
176 176  ERXRouteRequestHandler(WOActionRequestHandler).//handleRequest(WORequest) line: 221
177 177  ERXRouteRequestHandler.getRequestHandlerPathForRequest(WORequest) line: 782//
... ... @@ -203,3 +203,13 @@
203 203  | ERXRest.strictMode | ERXRest.strictMode
204 204  \\          |
205 205  ERXRouteController
116 +
117 +Properties
118 +
119 +ERXRest.accessControlAllowRequestHeaders
120 +ERXRest.accessControlAllowRequestMethods
121 +ERXRest.defaultFormat
122 +ERXRest.strictMode
123 +ERXRest.allowWindowNameCrossDomainTransport
124 +ERXRest.accessControlMaxAge
125 +ERXRest.accessControlAllowOrigin