Log in to GraphQL Editor
Levensthein algorithm for better faker experience
Artur

Artur Czemiel

10/21/2018

Levensthein algorithm for better faker experience

Today I am writing about faking data again using ts-api-faker . Usually we pass this kind of data to faker

[
  {
    "name": "name.firstName",
    "surname": "name.lastName",
    "mail": "internet.email",
    "profilePhoto": "internet.avatar",
    "animalPhoto": "image.cat"
  },
  {
    "name": "name.firstName",
    "surname": "name.lastName",
    "mail": "internet.email",
    "profilePhoto": "internet.avatar",
    "animalPhoto": "image.dog"
  }
]

and then we receive faked data

[
  {
    "name": "Van",
    "surname": "Veum",
    "mail": "[email protected]",
    "profilePhoto": "https://s3.amazonaws.com/uifaces/faces/twitter/pixage/128.jpg",
    "animalPhoto": "https://source.unsplash.com/200x200/?cat"
  },
  {
    "name": "Serena",
    "surname": "Wilderman",
    "mail": "[email protected]",
    "profilePhoto": "https://s3.amazonaws.com/uifaces/faces/twitter/imcoding/128.jpg",
    "animalPhoto": "https://source.unsplash.com/200x200/?dog"
  }
]

It works perfect but... Usually a schema looks like this.

[
  {
    "name": "String",
    "surname": "String",
    "mail": "String",
    "profilePhoto": "String",
    "animalPhoto": "String"
  }
]

The answer from faker is inappropriate then

[
  {
    "name": "atque",
    "surname": "eos",
    "mail": "voluptas",
    "profilePhoto": "similique",
    "animalPhoto": "earum"
  }
]

What if you use levensthein algorithm on keys of values and transform values to the closest to key name option?

Again we pass

[
  {
    "name": "String",
    "surname": "String",
    "mail": "String",
    "profilePhoto": "String",
    "animalPhoto": "String"
  }
]

Voila, we get the correct faker structure.

[
  {
    "name": "Edgar",
    "surname": "Alyce64",
    "mail": "[email protected]",
    "profilePhoto": "https://source.unsplash.com/200x200/?profile",
    "animalPhoto": "https://source.unsplash.com/200x200/?animal"
  }
]

I've just added this feature to my repo ts-api-faker

Feel free to contribute and extend this library functionality. If you support me and this idea please star this repo to help me get more contributors and extend ts-api-faker library.

In future we can add machine learning to this and get ultimate intelligent faker for our apis and databases :)

Check out our other blogposts

Communication with GraphQL Server in JS with Pokemon Schema
Artur Czemiel
Artur Czemiel
Communication with GraphQL Server in JS with Pokemon Schema
3 min read
over 4 years ago
GraphQL Server under 5 minutes - TypeScript
Tomek Poniatowicz
Tomek Poniatowicz
GraphQL Server under 5 minutes - TypeScript
11 min read
over 4 years ago
Python models in GraphQL with Rust backend in 1 line of code
Dan Stein - DJ Fresh
Dan Stein - DJ Fresh
Python models in GraphQL with Rust backend in 1 line of code
4 min read
about 1 year ago

Ready for take-off?

Elevate your work with our editor that combines world-class visual graph, documentation and API console

Get Started with GraphQL Editor