C# Api WEB

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 6

Con la ayuda de este documento se creará usando el lenguaje de programación , una API Web, esta consiste en un conjunto

de instrucciones (Métodos) almacenados en un servidor y que permitirán realizar un CRUD muy básico de una base de datos.
En otro documento se explicará con detalle cómo realizar los distintos clientes tanto en como en y conseguir así que se
ejecuten cada uno de los métodos usando instrucciones adecuadas para cada uno.

Antes de hacer nada hay que empezar con la creación del


proyecto. Con el Visual Studio abierto se accede al menú
Archivo > Nuevo > Proyecto y seleccionamos las opciones que
se encuentran en las siguientes imágenes. Estas opciones
permiten crear un servidor que aplique el modelo de trabajo
MVC (Modelo – Vista – Controlador) y también el uso de Web
Api's. Si bien se podría haber creado directamente un proyecto de tipo Web Api, este tiene el
defecto de incluir ciertas carpetas a las que no se le dará ningún tipo de uso (al menos
nosotros).

Una vez el proyecto esté creado lo primero a realizar es la implementación de la clase Datos, la cual se encargará de realizar la
conexión con la base de datos y las distintas ejecuciones de los métodos para el CRUD. Para crear la clase se hace clic derecho
sobre cualquiera de las carpetas y se selecciona la opción Agregar > Clase, y en la ventana emergente se elige la primera opción
disponible y se pulsa Aceptar, sin olvidar de asignarle un nombre en el cuadro de texto inferior.

Una vez la clase haya sido creada lo primero es asignar los distintos atributos de la clase que serán 3:

MySqlConnection que será el atributo que permita realizar la conexión con la base de
datos
DataSet que vendría a ser el ResultSet de , con ciertos elementos adicionales para
facilitar el recorrido de los datos.
MysqlAdapter que funciona como intermediario entre el DataSet y una o más
consultas ejecutadas.

El constructor estará vacío. Así que lo siguiente a


realizar serán los métodos que pondrán en
marcha la conexión. Esta acción se lleva a cabo en
dos métodos distintos, InicializarConexión(), será
un método privado que, como su nombre inicia,
crea la conexión. Los datos a aportar para ello, son
los mismos que en otros lenguajes, Servidor,
Puerto, Base de Datos y la Cuenta de Usuario. Puede haber más datos, o elementos, a incluir, pero no serán necesarios. Para la
ejecución de la conexión basta con realizar un new del objeto MySqlConnection creado anteriormente y entre llaves asignarle
una String con los datos ya mencionados.
En el método OpenConnection(), se hace una llamada al método
anterior, Tras eso comprobará que el estado actual de la conexión no
se encuentre cerrada, y en caso contrario ejecutará nuevamente la
apertura de la conexión. El siguiente método es el que cierra la
conexión CloseConnection(), simplemente comprobará que si la
conexión está abierta y en caso contrario la cerrará.

Lo siguiente es la creación de 2 métodos, que, si bien hacen cosas similares, el proceso


de ejecución es distinto. El método Query() que permite la ejecución de una instrucción
SQL y que guarda el resultado dentro del DataSet y el método EjecutarComando() que,
si bien permite la ejecución de una instrucción SQL, no almacena datos en el DataSet
si no que sólo ejecuta la instrucción, siempre y cuando no devuelva ningún resultado.
En síntesis, el primer método será usado para ejecutar sentencias Select, mientras que
la segunda es para la ejecución del resto de instrucciones, Update, Insert y Delete.

No hay que olvidar la creación de método getConnection() y getDatos(). Su nombre debería ser más que suficiente para saber
qué es lo que hace. El primer método permite la obtención del objeto Connection, mientras que el segundo permite la obtención
de los datos almacenados en el DataSet.
POJO
Este será el objeto que se encargará de transportar los datos de los alumnos entre las
distintas clases, además que la ejecución de las consultas hará uso de este POJO. No INSTRUCCIONES SQL
tiene mucha ciencia la creación de esta clase, basta con añadirle los mismos atributos
que los campos de la base de datos, incluyendo el mismo tipo, y sin olvidar los getters y
setters para poder acceder y modificar los distintos atributos de la clase. No olvidar que los valores
incluidos en la instrucción SQL
Una vez creado todos estos elementos se debe implementar deben ir entre comillas simples.
los "decoradores" y . La primera
específica a la clase que se podrá serializar y podrá ser Dado que se usará un objeto
convertido en otro tipo de datos como puede ser String, XML, Alumno, hay que seguir el patrón
etc. Este decorador se debe incluir encima del nombre de la +", '"+alumno.Nombre+"', "+.
clase. El decorador , indica a la clase los distintos
elementos que serán serializados en cada momento gracias a No olvidar en ningún momento
la clase DataContractSerialize, por lo que se deberá incluir las comillas y las comas, procurad
este decorador encima de cada uno de los atributos. no añadir de más o no olvidarse
alguna.

Tras esto empezaremos con la creación de las clases de


este proyecto. La primera de ellas es la interfaz Alumno
que sólo constará de las signaturas de los distintos
métodos que tendrán las clases heredadas. Los métodos a incluir son 5, estos métodos se
encargarán de leer, escribir, editar y borrar elementos de la base de datos. Los métodos
elegidos para este caso son los que se muestran en la imagen.

Esta clase será aquella que iniciará la clase Datos, que será la que nos permita conectarnos a la base de datos y ejecutar algunas
de las consultas que nosotros hayamos definido. Este tendrá 2 atributos únicos, el primero será la instancia de la clase datos y
el segundo será la instancia de la clase Alumnos, la cual funcionará como POJO. En el constructor de la clase se inicializará
solamente la clase datos.

Hay que indicar que esta clase,


NegocioAlumno, implementará la
EL DATASET & DATAROW interfaz antes diseñada. Esto se
consigue incluyendo junto al
nombre de la clase, no la instrucción
"implements" como ocurre en .
En este método se hará uso de
Al contrario que ocurre ahí, se usará
objetos que no conocemos en
el símbolo ":" seguido del nombre
pero que tienen su variante en
de la interfaz que implementará, en este caso: NegocioAlumno : IAlumno. Esto,
.
como ya se sabe, nos obligará a implementar todos los métodos de la interfaz.
Dicho objeto es el DataRow. Este
objeto permite almacenar en una Los métodos a definir son múltiples y algunos muy parecidos. A excepción del
variable una única fila de un método getAll(), se han implementado el resto de métodos, Add, Get, Remove y
DataSet, es decir, de lo que vendría Update. Tanto el Remove como el Update son idénticos, la única diferencia a
a ser de un ResultSet de . encontrar es la instrucción SQL. Por lo que sólo se explicará uno de estos dos.

En síntesis, el DataRow vendría a


ser un ResultSet con un único
registro.
Este método permitirá al servidor obtener un dato de tipo Alumno e insertarlo en la ORDEN EN UN DATAROW
base de datos. Lo primero es indicar en la signatura del método el tipo de datos que
vamos a recibir por medio de su ejecución, en este caso es un objeto tipo Alumno.
Lo siguiente es crear la instrucción SQL (no hay que explicar cómo crearlo, se debe Ya se mencionó que método usar
saber). Seguido a esto ejecutamos el comando con ayuda de la clase Datos, usando para obtener un valor de un campo
el método EjecutaComando(), pasándole como parámetro la instrucción SQL. en un DataRow, pero hay un
detalle que no se debe olvidar.

Cuando se indica el número de


campo a obtener, no olvidéis que al
igual que en un vector el primer
campo es el número 0, y cada uno
de los siguientes correspondería a
un número mayor que el anterior.

De tal forma que para obtener el


valor del primer campo hay que
usar la instrucción field<T>(0).
Este método permitirá al servidor obtener un dato de tipo Alumno y donde se
almacenarán los datos de dicho alumno. Para el valor del segundo campo
field<T>(1). Así sucesivamente con
Para conseguirlo, ejecutamos el método Query(), de la clase Datos, al cual hay que los siguientes.
pasarle como parámetros, la String con la instrucción SQL, que vendría a ser el Select.
Y un nombre que se le asignará a la consulta, para que al almacenarla en el DataSet
se acceda a ella usando sólo su nombre y no tener que vernos obligados a usar
métodos como next() al igual que ocurría con el ResultSet en .

Se inicializa el objeto alumno


creado al comienzo de la clase.
Y para obtener los valores de VALOR DE RETONO
cada uno de los campos se usa
el método genérico
Tened en cuenta que la ejecución
Field<T>(N). Donde <T> sería
de la instrucción EjecutaComando,
sustituido por el tipo de dato
retornará un integer en caso de
que vamos a obtener (int.
ejecutarse con algún error
String, char, boolean...) y
retornará un –1, en caso de éxito
siendo N sustituido por el
devolverá un número que
número de campo que se desea obtener.
equivaldrá a la cantidad de
registros modificados o eliminados.
Una vez asignado todos los valores de los campos al objeto alumno, basta con
retornar de vuelta dicho objeto. Y con todo esto estaría completado el método en
Esto puede ser útil para la
cuestión.
comprobación de errores en la
parte del cliente. No olvides tenerlo
en cuenta.

Este será el método que se encargará de la eliminación de un registro dentro de la


tabla de la base de datos. No hay que explicar cómo crear dicha instrucción por lo
que sólo se mencionará el método a usar de la clase Datos, y algunas diferencias con
el método Update que se deberá implementar siguiendo este método como patrón.
El método de la clase Datos a usar es el método
EjecutaComando, ya que no nos devolverá
ningún alumno al no ser una búsqueda. Este
método es muy simple y no hay que hacer nada
más. Para que se tenga un ejemplo visual se ha incluido una imagen con la instrucción.

Hay dos diferencias únicas entre el método Remove y Update. El primero es el parámetro pasado por la signatura, que en vez
de ser un integer será un objeto Alumno, y la otra diferencia será la instrucción SQL que se deberá usar es un Update y no un
Delete.

El controlador Alumno, será aquella clase que ejecutará los métodos de la clase
LINEAS AFECTADAS NegocioAlumno, lo cual permitirá al "sistema" a ejecutar un método u otro según
los parámetros que se le envíen y del tipo de acción que se vaya a realizar. Crear esta
Un recordatorio, los valores de clase no es nada complicada, por suerte Visual Studio tiene un wizard que te ayudará
retorno de las ejecuciones de los en la creación del controlador. Para eso se hace clic derecho sobre la carpeta
métodos DeleteAlumno y Controller y se selecciona la opción Agregar > Nuevo Controlador... . Y de la lista se
UpdateAlumno devuelven valores selecciona aquel que pone
entre 0 y N, siendo este último la Controlador de Web API 2 –
cantidad total de filas que se han en Blanco. Esto nos creará la
borrado o modificado. clase con su respectivo
implement. El nombre queda a
Que se obtenga como valor un 0, no elección de cada uno, en
quiere decir que esté mal, si no que nuestro caso le dimos el
no se ha encontrado un registro nombre de AlumnoController.
que coincida con la condición
indicada en la cláusula WHERE. Esto Esto creará una clase completamente vacía sin atributo, sin métodos, ni siquiera el
debéis tenerlo en cuenta cuando constructor. Por lo cual habrá que implementar cada uno de los métodos y atributos
vayáis a hacer los distintos clientes. necesarios. En síntesis sólo se necesitará 1 atributo, que será el negocio y 5 métodos,
que incluyendo el constructor, son el método de addAlumno(), getAlumno(),
deleteAlumno() y UpdateAlumno().

El atributo, como se mencionó con anterioridad, que tendrá la clase será el negocio, NegocioAlumno y se inicializará en el
constructor. Los métodos siguientes se explicarán debidamente.

GetAlumno: Será el método que nos permitirá desde el cliente obtener un


alumno desde la base de datos. Por lo tanto, hay que tener en cuenta dos cosas,
el tipo de valor que le vamos a dar para buscar al alumno y el tipo de elemento
que nos devolverá en caso de realizarse con éxito. El primero, como viene siendo
común, se usará el id del alumno, y por norma general este suele ser un número,
es decir, un integer. Por lo que le pasaremos por parámetro uno de su mismo tipo. El valor de retorno dependerá de cómo
hayamos definido el método get en la clase Negocio. En este caso, dado que devuelve un objeto de tipo Alumno, debemos
retornar un objeto del mismo tipo. Como ya se ha mencionado en este párrafo, lo que hará este método es ejecutar el método
get de la clase Negocio, pasándole el id del alumno. De tal forma que la signatura y el cuerpo del método quedaría como la
imagen que acompaña al texto.

AddAlumno: Será el método que nos permitirá desde el cliente enviar un


alumno a la Web API y almacenar dicha información en la base de datos.
Como ocurre con otros métodos hay que tener en cuenta el tipo de valor que
se recibe y que se envía, es decir el parámetro entre los paréntesis y el valor
de retorno. El método Add() de la clase Negocio, recibe un alumno mientras
que devuelve un valor integer, el cual indicará si se ha ejecutado con éxito o no el añadido del alumno. Así que siguiendo la
misma idea que antes se crea un método con una signatura y un cuerpo similares, pero acordes al tipo de acción que se va a
realizar.
DeleteAlumno: Como su nombre
indica, y como viene siendo lógico, VERBOS
este método será el que se
encargará de la eliminación de un
Los verbos son el uso de los verbos
registro (alumno) en la base de
en inglés para la diferenciación de
datos. Su signatura es similar al del
métodos.
método GetAlumno, la única salvedad es que al ejecutar el método RemoveAlumno
de la clase Negocio, este no devuelve un alumno, si no un número que indica si se
Esto se consigue añadiendo sobre
ha ejecutado la instrucción con éxito o no, siendo este la cantidad de líneas
cada método el patrón
afectadas. Así que siguiendo la misma idea que antes se crea un método con una
[Http+Verbo], (llaves incluidas) el
signatura y cuerpo similares, pero acordes al tipo de acción que se va a realizar.
verbo corresponderá a la acción a
realizar.
UpdateAlumno: No hay mucho que
indicar en este método ya que la
Get para Select, Put para Update,
signatura del método es muy similar
Delete para los Delete (valga la
al de AddAlumno, la única salvedad
redundancia) y Post para Add
se encuentra en el nombre del método y el cuerpo del misma. Su finalidad es recibir
(Insert).
un alumno y actualizar los datos en la base de datos, usando para ello el método
Update(), de la clase Negocio.
Esto ayudará para cuando se haya
que ejecutar la consulta desde el
Con todos estos elementos bien definidos se habrá creado con éxito un API Web
cliente se acceda al método en
que permite la ejecución de sus distintos métodos para el CRUD de la base de datos
cuestión con más facilidad.
que se ha estado usando desde el inicio del curso.
.

También podría gustarte