blob: cedad5df1c32a025903799e15fd10d2adc4b46d3 [file] [log] [blame]
----------
Deployment (Once we know we need to create a new WAR).
----------
. Given global config
. Given gateway topology
. Create empty WebArchive
. Create empty WebAppDescriptor
. Invoke the Gateway deployment contributor
. Create empty ClusterConfig
. Find all ResourceConfigFactory services
. For each service in gateway topo
. Find and service's config factory
. Add created resources configs to gateway config
Q: How do they know to include as vs ss?
. Populate the deployment context with the above.
. Find all ClusterDeploymentContributor services
. Invoke each contributor
.
If the query is empty, never include the ? in the expansion.
Have every URL section support *, **, {*} and {**}.
Have Params include a source enum.
A {*} or {**} in an expansion template will only include params from the same "source.".
Have ** in the authority if there is only one apply to all four parts.
Rethink the way the "extra" was handled.
The source/target below should create a complete copy of the URL.
{*}://{**}/{**}?{**}#{**}
{*}://{**}/{**}?{**}#{**}
Consider having the param name for the {**} shortcuts be things like
{scheme} {host}, {port}, {username}, {password}, {path}, {query}, {fragment} or shorter
{s} {hn} {pn} {un}, {pw}, {p}, {q}, {f}
These might be a good idea because they should be invalid to specify in the syntax because nested {}'s are allowed
to make parsing easier.
Path
{path}
Match: {path=*}
Extract: {path=**}
{*} - same as *
{**} - same as **
Query
{query}
Match: query={query=**}
Extract: query={query=**}
{*}
Match: *={*=*}
Extract: query={query=**}
{**}
Match: *={*=**}
Extract: *={*=**}
--- Path param matching ---
1. Path param required [1,1]
Pattern: /path/{param-name}/path
2. Path param optional [0,n]
Pattern: /path/{param-name*}/path
2. Path remainder optional [0,n]
Pattern: /path/{**}
--- Query param matching
1. Query param required [1,1]
Pattern: /path?name={param-name}
Template: /other-path?other-name={param-name*}
2. Query param optional [0..n]
Pattern: /path?name={param-name*}
Template: /other-path?other-name={param-name*}
3. Query param remainder [0..n]
Pattern: /path?{**}
Notes
By default patterns are reluctantly matched
Query parameter ordering is not significant.
Path parameter ordering is a requirement for matching.
This should match anything /{**}?{**}
The should reproduce the input /{**}?{**}
Note: The **'s will only match what isn't specifically consumed. Therefore for query param matching they must always logically be last.
Note: For {**} path params remember that they are "reluctant". The value *** could be greedy.
Extensions
Could use + to mean [1,n]
Could use ? to mean [0,1]
Could use additional * to mean greedy **, +*, ?*, [1,n]*