Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/erikwittern/is-base-url

A small tool to check whether a given URL is likely to be a base url of a web API
https://github.com/erikwittern/is-base-url

Last synced: about 1 month ago
JSON representation

A small tool to check whether a given URL is likely to be a base url of a web API

Awesome Lists containing this project

README

        

# is-base-url

A small tool to check whether a given URL is likely to be a base url of a web API. `is-base-url` takes as input a URL string and returns a `score` for how likely it is a base URL. To do so, `is-base-url` considers lexical features of the given URL that either support or discourage the classification as a base URL.

## Usage

Install via:

npm i is-base-url

Use it via:

```javascript
var isBaseUrl = require('is-base-url')

var result = isBaseUrl('http://api.twitter.com/v1')
/**
* result will look like this:
* {
* score: 1,
* features: {
* positive: {
* containsApiSubstring: true,
* containsVersionSubstring: true,
* endsWithVersionSubstring: true,
* endsWithNumber: true },
* negative: {
* hasQueryString: false,
* hasFragment: false,
* containsNonApiSubstring: false,
* overTwoPaths: false,
* endsWithFileExtension: false,
* containsBracket: false,
* isHomepage: false
* }
* }
* }
*/
```

The `score` is a value ranging from -1 to 1. The more positive features are `true`, the higher the score. Reversely, the more negative features are `true`, the lower score. Thus, the higher the value, the more like the given URL is a base URL.

`isBaseUrl` will return `undefined` if 1) the given variable is not a string or 2) if the given string is not a valid URL.

### Features

`isBaseUrl` considers positive and negative features.

#### Positive

- `containsApiSubstring`: true if the given URL contains the substring `api`.
- `containsVersionSubstring`: true if the given URL contains a substring indicating a version number, e.g. `v1`, `v.1.2`.
- `endsWithVersionSubstring`: true if the given URL ends with a version number.
- `endsWithNumber`: true if the given URL ends with a number.

#### Negative

- `hasQueryString`: true if the given URL has a query string (following an `?`).
- `hasFragment`: true if the given URL has a fragment (following an `#`).
- `containsNonApiSubstring`: true if the given URL contains a string not associated with a base URL, e.g., `schema`, `w3`.
- `overTwoPath`: true if the given URL has over 2 path components.
- `endsWithFileExtension`: true if the given URL ends with a file extension, e.g., `.json`, `.html`. This feature considers the URL substring before the query string or fragment, if present.
- `containsBracket`: true if the given URL contains a bracket, e.g., `{`, `>`.
- `isHomepage`: true if the given URL is equal to the homepage of that domain, e.g., `http://www.rottentomatoes.com`.

### Options

If you want, you can pass an options object to `isBaseUrl` to customize its behavior:

var result = isBaseUrl('http://api.twitter.com/v1', {
...options...
})

If you don't set an option, its default value will be used. The following options are available:

- `checkUrlValid` (default: `true`) - Determines whether the given URL is checked for validity. If the check is performed and an invalid URL is provided, `isBaseUrl` will return `undefined`.
- `weights` (default: all features have weight `1`) - Allows to assign custom weights to specific features. For example, to make `endsWithFileExtension` more important, do:

var result = isBaseUrl('http://api.twitter.com/v1', {
weights: {
negative: {
endsWithFileExtension: 3
}
}
})

Note: passing weights will result in the score not necessarily ranging from -1 to 1 anymore.

License: MIT