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
Change comment: There is no comment for this version
To version 44.1
edited by Pascal Robert
on 2012/05/02 21:09
Change comment: There is no comment for this version

Summary

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