Статьи

Marvel’s Superheroic REST API

Недавно комиксы Marvel выпустили REST API, который позволяет разработчикам получать доступ к персонажам комиксов и связанным с ними комиксам и историям. Я знаю, как это круто! Этот пост ознакомит вас с примером кода и покажет, как получить информацию из их API.

Вот предварительные условия, необходимые для продолжения.

  • Java 1.6 и выше
  • Maven 3
  • Аккаунт на https://developer.marvel.com . Это должно дать вам комбинацию открытого / закрытого ключа

Во-первых, настройте файл pom.xml для maven и настройте две зависимости. Мы будем использовать resty в качестве нашего HTTP-клиента и общего кодека Apache, чтобы упростить процесс хэширования наших параметров. Создайте файл pom.xml, который выглядит следующим образом.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.github.codingricky</groupId>
    <artifactId>marvel-rest-client</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>marvel-rest-client</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>us.monoid.web</groupId>
            <artifactId>resty</artifactId>
            <version>0.3.2</version>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.9</version>
        </dependency>
    </dependencies>
</project>

Теперь, когда зависимости установлены, давайте создадим простой REST-клиент, который выполняет одну из служб. Реально, если вы можете взаимодействовать с одной конечной точкой, вы должны иметь возможность применять ту же технику для взаимодействия с другими.

Понимание структуры URL

Из документации , URL для получения всех символов, это http://gateway.marvel.com/v1/public/characters . Мы не можем вызвать это напрямую, нам нужно будет передать несколько дополнительных параметров для авторизации.

Наш URL должен выглядеть примерно так:

http://gateway.marvel.com/v1/public/characters?timeStamp= timeStamp & apiKey = apiKey & hash = hash

Кроме того, параметры должны быть заменены реальными значениями.

Давайте разберем дополнительные параметры, которые мы передаем.

параметр Стоимость
TIMESTAMP временная метка (или другая длинная строка, которая может меняться в зависимости от запроса)
apiKey Ваш открытый ключ
гашиш Хэш md5 следующих полей объединен (timeStamp + privateKey + publicKey)

Учитывая тот факт, что мы понимаем, как нужно формулировать запросы, давайте создадим очень простой REST-клиент, который вызывает этот сервис.

REST Client

Давайте создадим структуру каталогов src.

mkdir -p src/main/java  

Теперь создайте файл с путем src / main / java / RestClient.java со следующим содержимым.

import java.io.IOException;  
import java.security.NoSuchAlgorithmException;

import org.apache.commons.codec.digest.DigestUtils;  
import us.monoid.web.Resty;

public class RestClient {  
    public static void main(String[] args) throws IOException {
        String publicKey = args[0];
        String privateKey = args[1];
        long timeStamp = System.currentTimeMillis();
        int limit = 5;

        String stringToHash = timeStamp + privateKey + publicKey;
        String hash = DigestUtils.md5Hex(stringToHash);

        String url = String.format("http://gateway.marvel.com/v1/public/characters?ts=%d&apikey=%s&hash=%s&limit=%d", timeStamp, publicKey, hash, limit);
        String output = new Resty().text(url).toString();
        System.out.println(output);
    }
}

Следующие пункты должны быть сделаны о коде выше.

  • Открытый ключ и закрытый ключ передаются в клиентскую программу в качестве первого и второго аргумента соответственно
  • В качестве временной отметки используется только системное время, поэтому System.currentTimeMillis ()
  • DigestUtils из общего кодека используется для хеширования объединенной строки
  • Предел 5 установлен, чтобы ограничить количество данных, возвращающихся
  • Простая текстовая строка возвращается из запроса и выводится на консоль

После всего этого вы сможете его скомпилировать и запустить.

$ mvn clean install
$ java -classpath target/*.jar RestClient your-public-key your-private-key 

Если это работает правильно, вы должны получить вывод, подобный следующему. Для краткости я обрезал вывод.

{"code":200,"status":"Ok","etag":"3c514a4e7","data":{"offset":0,"limit":5,"total":1402,"count":5,"results":[{"id":1009521,"name":" Hank Pym",
...

Надеемся, что этот пост продемонстрировал вам первые шаги к интеграции с Marvel REST API. Удачи в создании приложений для супергероев Marvel!

Если вам нужна дополнительная помощь, документация по Marvel на самом деле достаточно полная и должна быть вашим первым портом захода.