REST-сервис для операции сложения
В этом сценарии рассматривается REST-сервис, выполняющий сложение. Сервис вызывается по URL, http://<url>?num1=number1&num2=number2, а результат должен содержать сумму двух чисел, переданных сервису. Эту программу можно написать на разных языках. В нашем примере используются JSP (см. листинг 1) и PHP (см. листинг 2). JSP-программа написана в Eclipse IDE.
Листинг 1. REST-сервис, использующий JSP
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Sum</title>
</head>
<body>
<% if (request.getParameter("num1") == null ||
request.getParameter("num2") == null) { %>
<p>
<b>Wrong URL!!!</b>
</p>
<p>
<b>Enter URL in this format: </b>
<i>
http://<url>?num1=number1&num2=number2</i>
</p>
<% } else { %>
<b>Number 1:</b>
<i><%= request.getParameter("num1") %></i>
<br>
<b>Number 2:</b>
<i><%= request.getParameter("num2") %></i>
<br>
<b>Sum:</b>
<i><%= Integer.parseInt(request.getParameter("num1")) +
Integer.parseInt(request.getParameter("num2")) %></i>
<br>
<% } %>
</body>
</html>
В листинге 2 приведена та же программа, написанная на PHP.
Листинг 2. REST-сервис, использующий PHP
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Sum</title>
</head>
<body>
<?php if ($_GET["num1"] == NULL || $_GET["num2"] == NULL) { ?>
<p><b>Wrong URL!!!</b></p>
<p>
<b>Enter URL in this format: </b>
<i>http://<url>?num1=number1&num2=number2</i>
</p>
<?php } else { ?>
<b>Number 1:</b>
<i><?= $_GET["num1"] ?></i>
<br>
<b>Number 2:</b>
<i><?= $_GET["num2"] ?></i>
<br>
<b>Sum:</b>
<i><?= $_GET["num1"] + $_GET["num2"] ?></i>
<br>
<?php } ?>
</body>
</html>
Между этими примерами нет особых различий. Программа сама по себе не использует все возможности обоих языков. Она показывает, что когда дело касается основ, оба языка равноценны.
Возможности JSP позволяют использовать его преимущественно на корпоративном уровне. Например, в случае использования JSP программа при самом первом вызове загружается в память как сервлет. При каждом последующем запросе вызывается программа, находящаяся в памяти, что улучшает время ее реакции. Она также идеальна для среды Java. В случае использования PHP программа загружается в память при каждом вызове, что может увеличить время реакции для критических приложений.
Еще одной важной функциональной возможностью JSP, которая делает его более подходящим выбором для предприятия, является его многопоточность. PHP не имеет встроенной поддержки многопоточности.
Простая программа чтения фидов
Цель этого сценария заключается в предоставлении программе ссылки на фид. Программа должна получить фид и вывести все его заголовки. Чтобы сделать программу более интересной, мы подпишемся на фид в JSON-формате, а не в RSS.
Фрагмент кода, приведенный в листинге 3, взят из O'Reilly и написан на Java.
Листинг 3. Программа чтения фидов, использующая Java
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import org.apache.commons.io.IOUtils;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
public class JsonParser {
public static void main(String[] args) throws Exception {
String urlString =
"http://pipes.yahoo.com/pipes/pipe.run?_id=df36e60df711191549cf529e1df96884&
_render=json&
textinput1=and&urlinput1=http%3A%2F%2Ffeeds.wired.com%2Fwired%2Findex";
URL url = new URL(urlString);
URLConnection urlCon = url.openConnection();
InputStream is = urlCon.getInputStream();
String jsonTxt = IOUtils.toString(is);
JSONObject json = (JSONObject) JSONSerializer.toJSON(jsonTxt);
JSONObject value = json.getJSONObject("value");
JSONArray items = value.getJSONArray("items");
String title;
for (Object item : items) {
title=((JSONObject)item).getString("title");
System.out.println("\n" + title);
}
}
}
В листинге 4 приведена программа, написанная на Python.
Листинг 4. Программа чтения фидов, использующая Python
#!/usr/bin/python
import urllib.request
url = "http://pipes.yahoo.com/pipes/pipe.run?
_id=df36e60df711191549cf529e1df96884&_render=json&
textinput1=and&urlinput1=http%3A%2F%2Ffeeds.wired.com%2Fwired%2Findex"
HTTPdata = urllib.request.urlopen(url)
json_data = eval(HTTPdata.read())
for item in json_data['value']['items']:
print (item['title'])
Python-программу можно сократить еще больше – всего до трех строк. Оставьте в листинге 4 первые две строки и замените остальной код строкой из листинга 5.
Листинг 5. Сокращенная третья строка
for item in eval((urllib.request.urlopen("http://pipes.yahoo.com/pipes/pipe.run?
_id=df36e60df711191549cf529e1df96884&_render=json&textinput1=and&
urlinput1=http%3A%2F%2Ffeeds.wired.com%2Fwired%2Findex"))
.read()))['value']['items']:print (item['title'])
Пример приложения продемонстрировал гибкость этих языков. Ни один из них не имеет встроенной поддержки всех необходимых библиотек, поэтому необходимо импортировать нужные пакеты. В Python это даже проще, поскольку можно манипулировать JSON по умолчанию. В Java-коде это труднее, потому что для создания работающей программы необходимо получить JSON-библиотеки и их зависимости.
Корпоративные приложения
При разработке корпоративных приложений проектировщики и программисты должны пройти по канату, балансируя между производительностью, безопасностью, простотой обслуживания и временем разработки. Речь идет не просто о выборе языка программирования, который обеспечит лучшие показатели производительности. Не менее важными факторами являются время создания рабочей версии, гибкость и степень интегрируемости в существующую инфраструктуру.
Важную роль играет также среда, в которой программа будет использоваться. Корпоративные программы никогда не работают автономно. Каждая программа становится частью более крупной задачи, поэтому важным фактором становится способность к взаимодействию.
Представьте себе, что предприятие, использующее свои реализованные на Java-коде Web-сервисы, хочет в качестве надежной платформы добавить WebSphere® MQ. Нет никакого смысла использовать для написания приложения C-интерфейсы системы WebSphere MQ; следует выбрать Java.
Исследовательские проекты
Предположим, что вашим следующим проектом является исследование в области, не связанной с ИТ и компьютерами. Пусть это будет, например, обработка изображений, обработка звука, использование водяных знаков или исследование фондового рынка. Необходимо создать код для имитации реального поведения, но вы не очень разбираетесь в компьютерах.
Проект требует быстрого написания большого количества необязательно идеального кода. Самым важным фактором является время исполнения. В данном случае это означает, насколько быстро можно сделать работающий компонент, чтобы быстрее вернуться к основной задаче. Это напоминает написание маленьких заглушек без особого внимания к способности к взаимодействию. Проект может стать полноценным продуктом, но в данный момент он находится на начальном этапе. Основной задачей является создание прототипа.
В такой ситуации на помощь могут прийти такие языки, как MATLAB и LISP. Если вы начнете создавать прототип на C, то погрузитесь в дебри переменных и указателей и не получите реальных результатов исследования. MATLAB интегрируется с C/C++ и Fortran, что позволяет вызывать C-код из MATLAB и наоборот.
В начало
Заключение
В данной статье были рассмотрены некоторые факторы, влияющие на выбор языка программирования. Однако этот список неполон. Например, если опытный программист предложит вам язык, который вы не рассматривали, возможно, вам следует оценить и его.
Мы надеемся, что теперь вам будет легче выбрать язык программирования для вашего следующего проекта. Языков становится все больше, поэтому возможность выбора есть всегда.