REST Web Service для использования БД MySQL - PullRequest
0 голосов
/ 13 октября 2011

Я создаю REST WebService с JAX-RS и Tomcat для использования базы данных MySQL.

Я придерживаюсь этой модели:

@Path("/login")  
public class Login {

String username;
String password;
// This method is called if POST is requested
@POST
@Produces(MediaType.APPLICATION_XML)
public String loginResponseXML(@FormParam("username") String user, @FormParam("password") String pass) {

    //Connection to MySQL Database
    try {
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost/sakila", "root","larcom");
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery("Select first_name, last_name From actor where first_name='" +
                                        user + "' and last_name='" + pass + "'");

        while (rs.next()){
            System.out.println(rs.getString("first_name") + " " + rs.getString("last_name"));
            username = rs.getString("first_name");
            password = rs.getString("last_name");
        }
    }           
    catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    }

    if (user.equals(username) && pass.equals(password)) {
        return ("<?xml version=\"1.0\"?>" + "<auth>200" + "</auth>"); //Success
        //return "Success!";
    } else {
        return ("<?xml version=\"1.0\"?>" + "<auth>404" + "</auth>"); //Damn
        //return "Damn!";
    }

    }
}

Я вызываю этот метод с помощью:

HttpPost httppost = new HttpPost("http://192.168.15.245:8080/org.jersey.andre/rest/login");

Теперь мой вопрос: если я хочу запросить в БД другую таблицу, мне нужно создать новый класс, такой как Login, и снова установить соединение JDBC?Новый класс и новое соединение JDBC для каждого класса, который делает запрос к БД?Проблемы с производительностью?

Надеюсь, вы понимаете.Заранее спасибо.

1 Ответ

0 голосов
/ 13 октября 2011

Здесь приведено несколько советов: пожалуйста, изолируйте код на основе БД от «слоя данных», так сказать ... выполняйте только диспетчеризацию / бизнес-логику внутри ваших классов ресурсов.

Теперь, если вы запрашиваете другую таблицу, у вас будет другой запрос! Вы можете использовать одно и то же соединение (плохое) или создать новое и запустить другой запрос (ы).

Теперь, каждый ли ресурс обращается к другой таблице или к той же таблице с другим запросом, зависит от вашего выбора «представления» для этого ресурса. Есть причина, по которой схема RDB имеет несколько таблиц, и довольно часто у вас будет другой запрос, включающий несколько таблиц или взаимно независимых таблиц.

Проблемы с производительностью: для «свежих данных» вы всегда будете обращаться к БД, так сказать. Если вы хотите оптимизировать этот процесс или разработать собственный кеш (чрезвычайно сложный) или использовать такие подходы, как memcached или ehcache для повышения производительности - прежде чем вы решите это сделать, убедитесь, что вы проверяете, стоит ли это.

У вас будет около 1000 ударов в секунду? Вы, вероятно, нуждаетесь в некотором повышении производительности / обработке. За день ... может и нет. За 2-3 дня ... ЯГНИ (Тебе это не понадобится, так что пока не волнуйся)

Итак, для каждого «ресурса», который вы разрабатываете в своем приложении (логин НЕ является ресурсом: см. Соответствующий пост: Почему аутентификация на основе форм НЕ считается RESTful? ), выберите представление. Это может включать разные запросы и т. Д., Чтобы вы возвращали json / xml / xhtml (что бы вы ни выбрали). Каждый «вызов, связанный с БД» должен быть изолирован в своем собственном «слое данных» - я предлагаю использовать Spring JDBC, чтобы сделать вашу жизнь проще. Это снимет с вас бремя JDBC, и вы сможете сосредоточиться на создании своих DAO (объектов доступа к данным - паттерна для классов доступа к данным. Все DAO логически относятся к уровню данных)

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...