Software Development

X-Mas Musings – Too Many Paths. One Path Spec?

December is for many people a period of reflection or thought. So I decided to reflect upon last year’s things and thoughts — each day until Christmas. This is day 15.

Within a typical (Java) project there a lots of places where some kind of “path” needs to be specified.

Gradle

For starters, in any build configuration quite a few paths to directories or files need to be described.

sonarqube {
  properties {
    property 'sonar.sources', 'src'
    property 'sonar.exclusions', '**/*.spec.js'
    property 'sonar.tests', 'src'
    property 'sonar.test.inclusions', '**/*.spec.js'
  }
}

task test(type: YarnTask, dependsOn: 'yarn') {
  description = 'Run the client tests'

  inputs.files(fileTree('config'))
  inputs.files(fileTree('src'))
  inputs.file('package.json')
  outputs.dir('build')
  args = ['run', 'unit']
}

war {
  dependsOn asciidoctor
  from ("${asciidoctor.outputDir}/html5") {
    into 'static/docs'
  }
}

UrlMappings Grails

Mappings of urls to the appropriate controller and action on the server-side.

"/"(controller: "dashboard")
"500"(view: "/error")
"/api/v1/person/$id"(
  controller: "person", 
  action: "details")

Spring Security

Securing urls with permissions.

http
  .authorizeRequests()
  .antMatchers("/assets/**").permitAll()
  .antMatchers("/admin").hasRole("ADMIN")
  .anyRequest().authenticated()

Vue routing

Mappings of paths. Same project, but for the JavaScript client.

routes: [
  { path: '/', redirect: '/dashboard' },
  { path: '/staff/person/:id?', component: Person },
  { path: '*', redirect: '/notfound' }
]

Spring REST Docs

Describing the path of JSON fields to generate documentation for API requests and responses.

given(this.spec)
  .accept("application/json")
  .filter(document("user", responseFields(
    fieldWithPath("name").description("The user's name"),
    fieldWithPath("email.primary").description("The primary email address"),
    fieldWithPath("roles[]").description("List of roles"),
    fieldWithPath("subscription[].type.*.name").description("Any subscription type"))))
   .when().get("/user/5")
   .then().assertThat().statusCode(is(200));

And more…

That’s just in one project!

I sometimes even forget what the right syntax is �� Some docs clearly state they’re using Ant-style path patterns (**/*.?) or just use a home-grown system ([].*).

I think it’s time for a standardized “Path specification” — where all paths can be described in a uniform way and are treated equally! ��

Does your own project contains other surprising, path examples? I’d love to hear about them in the comments section.

Published on Java Code Geeks with permission by Ted Vinke, partner at our JCG program. See the original article here: X-Mas Musings #15 – Too Many Paths. One Path Spec?

Opinions expressed by Java Code Geeks contributors are their own.

Ted Vinke

Ted is a Java software engineer with a passion for Web development and JVM languages and works for First8, a Java Web development company in the Netherlands.
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Inline Feedbacks
View all comments
Back to top button