Skip to content

Releases: treflehq/trefle-api

1.6.0

15 Jul 15:24
bf21995
Compare
Choose a tag to compare

📦 Endpoints versioning

In order to avoid making breaking changes like this one in the future, API routes are now versionned. So the endpoint /api/species is now /api/v1/species. This let you the possibility to update when you're ready for the next releases.

📄 The data scructure changes

One of the biggest struggles we noticed was the pagination. Parsing the pagination links in the response headers was really painful, even if it's a stardard.

To solve this, we decided to include pagination links directly in the JSON response.

Now, all API calls wraps a data field, along with a links field, for pagination links, and optionally a meta fields, for high level informations such as counts.

🔧 Plant and species fields names changes

We removed and added a lot of fields. Most of USDA fields, such as propagation or products uses were removed, as they were too inaccurates.

You can get:

✂️ The filters and sort parameter changes

In order to avoid any name collision in parameters, filters are now scoped in the filter parameter. This means that common_name=mint is now filter[common_name]=mint.

You now also can exclude null values from results with the filter_not[ATTRIBUTE] parameter.

You can read more about filters in the documentation or see the The full list of filters in the reference.

📐 Ranges and orders

You can now query the range of values between two values with the range[FIELD]=min,max parameter.

For example, to query only species with a minimum height between 5 and 20 centimeters: api/v1/species?token=YOUR_TREFLE_TOKEN&range[maximum_height_cm]=5,20.

Filtering on ranges also allow to set only minimum or maximum values. For example:

  • /api/v1/species?range[maximum_height_cm]=5 only return species higher than 5 cm
  • /api/v1/species?range[maximum_height_cm]=,5 only return species lower than 5 cm

You can read more about ranges in the documentation or see the The full list of ranges in the reference.

🖼 Better plants/species images

Images were fully reviewed, and are now splitted into categories: flower, leaf, habit, fruit, bark and other.

🌍 Species distributions

We began to collect plant locations (ex: France) and establishments (ex: Native) per zone, and they're now included in the /species/{species_slug} and /plants/{species_slug} endpoints.

You can also filter species by distribution zones or by establishment.

For example, to get plants native from Tibet: /api/v1/distributions/tibet/plants?filter[establishment]=native.

🔍 Blazing fast search engine

A new search endpoint for plants and species is available: /api/v1/species/search?q=term.

This search was designed to respond in milliseconds, and is ready for input autocomplete or "as you type" queries. You can see it in action on the landing page.

🧰 Error reporting and data collection

You can now report errors on species, or even submit corrections / changes to us, directly from an API call.

This means a lot to us, as we want our data to be everyone's, and believe strongly in the power of the community.

📕 Adoption of better standards

All units are following the International System of Units (SI), so we replaced feets by centimeters, inches by millimeters and so on.
Temperatures are in celcuis and kelvin degrees for now, as the conversion is more complex than for standard units.

Scientific names now follows the Binomial nomenclature. For the species, it represents its genus and its species within the genus, resulting in a single worldwide name for each organism. The scientific name of an infraspecific taxons (ranks below species, such as subspecies, forms, varieties...) is a combination of the name of a species and an infraspecific epithet. A connecting term is used to denote the rank. See IAPT recommendation.

Distribution zones for plants/species are following the World Geographical Scheme for Recording Plant Distributions (WGSRPD).

📦 JSON responses when listing plants and species are more complete

We added some fields in the response, such as an image url or the genus and family names, and embedded synonyms.

For example, when listing plants:

[
  {
    "id": 123486,
    "slug": "corylus-avellana"
    "scientific_name": "Corylus avellana",
    "common_name": "common filbert",
    "complete_data": false,
    "link": "http://trefle.io/api/plants/123486",
  }
]

Is now

{
  "data": [
    {
      "id": 123486,
      "slug": "corylus-avellana",
      "scientific_name": "Corylus avellana",
      "common_name": "common filbert",
      "author": "L.",
      "bibliography": "Sp. Pl.: 998 (1753)",
      "family": "Betulaceae",
      "family_common_name": "Birch family",
      "genus": "Corylus",
      "genus_id": 2057,
      "image_url": "https://bs.floristic.org/image/o/0d92cadb0d66dce1b0a8b26913125d6501e31d68",
      "rank": "species",
      "status": "accepted",
      "synonyms": [
        "Corylus sylvestris"
      ],
      "year": 1753,
      "links": {
          "genus": "/api/v1/genus/corylus",
          "plant": "/api/v1/plants/corylus-avellana",
          "self": "/api/v1/species/corylus-avellana"
      }
    }
  ],
  "links": {
    "first": "/api/v1/plants?filter%5Bscientific_name%5D=Corylus+avellana&page=1",
    "last": "/api/v1/plants?filter%5Bscientific_name%5D=Corylus+avellana&page=1",
    "self": "/api/v1/plants?filter%5Bscientific_name%5D=Corylus+avellana"
  },
  "meta": {
    "total": 1
  }
}

📋 Synonyms separation

Synonyms are no longer returned in the species or plants response, and are now included as an array in the response.

📐 Species fields scales changes

"Scale-like" fields, such as "light" or "soil adaptation" are no longer with values like 'Low', 'Medium' and 'High', but are now on a scale from 0 to 10.

📋 Common names split

Common names have been reviewed, and are now grouped by language.