Changes for page ERRest In Depth

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

From version 36.1
edited by Pascal Robert
on 2012/03/11 21:01
Change comment: There is no comment for this version
To version 42.1
edited by Pascal Robert
on 2012/06/10 15:08
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -1,5 +1,132 @@
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 ->
27 +RestEntitiesController(ERXRouteController).performRouteActionNamed -> RestEntitiesController(ERXRouteController).performActionWithArguments(Method, Object...) ->
28 +Method.invoke -> ...
29 +RestEntitiesController.indexAction()
30 +
31 +{{/code}}
32 +
33 +ERXRestUtils
34 +
1 1  request > route
2 2  
37 +{{code}}
38 +
39 +/**
40 + * A NameFormat that behaves like Rails -- plural entities, plural routes, lowercase underscore names
41 + * (names_like_this).
42 + */
43 + public static NameFormat RAILS = new NameFormat(true, true, NameFormat.Case.LowercaseUnderscore);
44 +
45 + /**
46 + * A NameFormat that behaves like WO -- singular entities, singular routes, camel names (NamesLikeThis).
47 + */
48 + public static NameFormat WO = new NameFormat(false, false, NameFormat.Case.CamelCase);
49 +
50 + /**
51 + * A NameFormat that behaves like WO -- singular entities, singular routes, lowercase camel names (namesLikeThis).
52 + */
53 + public static NameFormat WO_LOWER = new NameFormat(false, false, NameFormat.Case.LowerCamelCase);
54 +
55 +{{/code}}
56 +
57 +* ERXRestContext
58 +** contains the editing context and an userInfo dictionnary
59 +** will be populated with er.rest.dateFormat, er.rest.timestampFormatter and er.rest.timestampFormat (read only for non-HTML responses)
60 +*** want to change the time format for a specific controller?
61 +
62 +{{code}}
63 +
64 +protected ERXRestContext createRestContext() {
65 + ERXRestContext restContext = new ERXRestContext(editingContext());
66 + restContext.setUserInfoForKey("yyyy-MM-dd", "er.rest.dateFormat");
67 + restContext.setUserInfoForKey("yyyy-MM-dd", "er.rest.timestampFormat");
68 + return restContext;
69 + }
70 +
71 +{{/code}}
72 +
73 +*
74 +** you just need to override createRestContext() in your controller if you want to add other stuff to the context (a user, etc.)
75 +* Properties
76 +** ERXRest.idKey (ERXRestFormatDelegate)
77 +*** (default "id") Override this property if you want to use a different key for the 'id' attribute** ERXRest.typeKey**
78 +** ERXRest.nilKey (ERXRestFormatDelegate)
79 +** ERXRest.writeNilKey (ERXRestFormatDelegate)
80 +** ERXRest.pluralEntityNames (ERXRestFormatDelegate)
81 +** ERXRest.writeTypeKey (ERXRestFormatDelegate)
82 +** ERXRest.suppressTypeAttributesForSimpleTypes (ERXXmlRestWriter)
83 +*** (default "false") If set to true, primitive types, like type = "datetime", won't be added to the output
84 +** ERXRest.strictMode
85 +*** 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
86 +*** 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
87 +*** ERXRouteResults: (default "true") If set to true, creating a ressource will return status code 201 Created, if set to false, will return 200 OK
88 +** ERXRest.pluralEntityNames (ERXRouteRequestHandler)
89 +** ERXRest.routeCase (ERXRouteRequestHandler)
90 +** ERXRest.lowercaseEntityNames (ERXRouteRequestHandler)
91 +** ERXRest.parseUnknownExtensions (ERXRouteRequestHandler)
92 +*** (default "true") If set to "false", will return a 404 status code if the format doesn't exist
93 +** ERXRest.missingControllerName (ERXRouteRequestHandler)
94 +*** (default "ERXMissingRouteController") Allow you to specify which controller to use when a route doesn't exist
95 +** er.rest.rfcDateFormat
96 +** er.rest.dateFormat
97 +** er.rest.dateFormat.primary
98 +** er.rest.dateFormat.secondary
99 +** er.rest.dateFormatter
100 +** er.rest.timestampFormat
101 +** er.rest.timestampFormat.primary
102 +** er.rest.timestampFormat.secondary
103 +** er.rest.timestampFormatter
104 +** er.rest.rfcDateFormat
105 +** er.rest.jodaTime
106 +** ERXRest.transactionsEnabled (default 'false') ERXRestTransactionRequestAdaptor
107 +** ERXRest.maxEventsPerTransaction (default '50') ERXRestTransactionRequestAdaptor
108 +** ERXRest.accessControlAllowRequestHeaders (ERXRouteController)
109 +** ERXRest.accessControlAllowRequestMethods (ERXRouteController)
110 +** ERXRest.defaultFormat (ERXRouteController)
111 +*** (default "xml") Allow you to set the default format for all of your REST controllers
112 +** ERXRest.allowWindowNameCrossDomainTransport (ERXRouteController)
113 +** ERXRest.accessControlMaxAge (ERXRouteController)
114 +*** (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.
115 +** ERXRest.accessControlAllowOrigin (ERXRouteController)
116 +*** Set the value to '**' to enable all origins. See [[https://developer.mozilla.org/En/HTTP_access_control#Access-Control-Allow-Origin]]**
117 +* JSON Schema
118 +** {{code}}
119 +/something?schema=true
120 +
121 +public WOActionResults indexAction() {
122 +if (isSchemaRequest()) {
123 + return schemaResponse(showFilter());
124 +}
125 +protected boolean isSchemaRequest() {
126 + return request().stringFormValueForKey("schema") != null;
127 +}
128 +{{/code}}
129 +
3 3  Application(ERXApplication).dispatchRequest(WORequest) line: 2051
4 4  ERXRouteRequestHandler(WOActionRequestHandler).//handleRequest(WORequest) line: 221
5 5  ERXRouteRequestHandler.getRequestHandlerPathForRequest(WORequest) line: 782//
... ... @@ -31,13 +31,3 @@
31 31  | ERXRest.strictMode | ERXRest.strictMode
32 32  \\          |
33 33  ERXRouteController
34 -
35 -Properties
36 -
37 -ERXRest.accessControlAllowRequestHeaders
38 -ERXRest.accessControlAllowRequestMethods
39 -ERXRest.defaultFormat
40 -ERXRest.strictMode
41 -ERXRest.allowWindowNameCrossDomainTransport
42 -ERXRest.accessControlMaxAge
43 -ERXRest.accessControlAllowOrigin