geocoder-php / geocoder-php/Geocoder

How do I change the OpenRouteService::API_URL for "On-Premise" install of software

Open
#1,157 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

improvement provider
Dominant language
PHP
Stars
4k
Forks
525
Avg merge
8m
Merged PRs (30d)
1

Description

I noticed the OpenRouteService::API_URL is being hard-coded into file Geocoder\Provider\OpenRouteService (vendor\geocoder-php\openrouteservice-provide\OpenRouteService.php)

Could someone please push the following code into the next version of OpenRouteService (updating Pelias would do the trick)

vendor\geocoder-php\pelias-provider\Pelias.php

/**
 * @param HttpClient $client  an HTTP adapter
 * @param string     $root    url of Pelias API
 * @param int        $version version of Pelias API
 */
public function __construct(HttpClient $client, string $root, int $version = 1)
{
    $this->_setPeliasApiRoot($root, $version);
    parent::__construct($client);
}

/**
 * Set the API root and version, see "_setPeliasApiRoot"
 * @param string     $root    url of Pelias API
 * @param int        $version version of Pelias API
 */
public function set_Pelias_ApiRoot(string $root, int $version = 1)
{
    return $this->_setPeliasApiRoot($root, $version);
}

/**
 * Set the API root and version
 * @param string     $root    url of Pelias API
 * @param int        $version version of Pelias API
 */
protected function _setPeliasApiRoot(string $root, int $version = 1)
{
    $this->root    = sprintf('%s/v%d', rtrim($root, '/'), $version);
    $this->version = $version;
}

vendor\geocoder-php\openrouteservice-provider

const API_URL = 'https://api.openrouteservice.org/geocode';
const API_VERSION = 1;

/**
 * @var string
 */
private $apiKey;

/**
 * @param HttpClient $client an HTTP adapter
 * @param string     $apiKey an API key
 */
public function __construct(HttpClient $client, string $apiKey)
{
    if (empty($apiKey)) {
        throw new InvalidCredentials('No API key provided.');
    }
    
    $this->apiKey = $apiKey;
    parent::__construct($client, self::API_URL, self::API_VERSION);
    $this->_set_ORS_API_Root(self::API_URL, self::API_VERSION, TRUE);
}

/**
 * Set the Openrouteservice URL
 * @param string $root
 * @param integer $version
 * @param boolean $check_version
 * @return void
 */
public function set_ORS_API_Root(string $root, $version, $check_version = false)
{
    return $this->_set_ORS_API_Root($root, $version, $check_version);
}

/**
 * Set the Openrouteservice URL
 * @param string $root
 * @param integer $version
 * @param boolean $check_version
 * @return void
 */
protected function _set_ORS_API_Root(string $root, $version, $check_version = false)
{
    parent::_setPeliasApiRoot($root, $version);
    if (filter_var($check_version, FILTER_VALIDATE_BOOLEAN)) {
        $this->_check_ORS_API_Root_Version($root, $root, $version);
    }
}

/**
 * Openrouteservice does not use /v1 in first version, but plan to add
 *  /v2 in next version.
 *
 * @see https://ask.openrouteservice.org/t/pelias-version-in-api-url/1021
 * @param string $root
 * @param string $new_root
 * @param string $version
 * @return void
 */
protected function _check_ORS_API_Root_Version(string &$root, string $new_root, $version)
{
    $version_ok = true;
    $version_ok = ($version_ok && is_numeric($version));
    $version_ok = ($version_ok && ($version === self::API_VERSION));
    $version_ok = ($version_ok && is_string($new_root));
    $version_ok = ($version_ok && !empty($new_root));
    $version_ok = (bool) $version_ok;
    
    if ($version_ok) {
        $root = $new_root;
    }
}

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the OpenRouteService provider and its hard-coded API_URL, then compare its constructor with the Pelias.php entry point described in the issue. Determine how an on-premise API root should be supplied while preserving the existing version handling. Done means OpenRouteService can target an on-premise URL instead of only the hosted endpoint.

Written by the indexing model from the issue text.

Assessment

Tech stack
php
Domain
api
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.