Adding a service¶
A service is defined by a set of coherent components that can evolve easily without any link between other services.
The usage of the Service Based Architecture is explained in the TS 29.500 and TS 29.501 from 3GPP.
The technology used to create those services is Django with important python packages that can be found in the "python packages" doc.
Creating the Django Application¶
IMPORTANT :
You must setup your development environment. You can follow the "Prerequisites for local development" documentation
Let's suppose you want to create a NF Service.
You must :
-
Create a subdirectory in the src directory following this pattern : nfName-serviceName-webapp
-
Create the Django application in this subdirectory :
1 2 3 | django-admin startproject nfName_nfService_api cd nfName_nfService_api django-admin startapp nfService_api |
You will have this architecture :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | │ manage.py │ ├───nfName_nfService_api │ settings.py │ urls.py │ wsgi.py │ __init__.py │ └───nfService_api │ admin.py │ apps.py │ models.py │ tests.py │ views.py │ __init__.py │ └───migrations __init__.py |
You shall rename nfName_nfService_api to project_settings using the command :
1 | mv ./nfName_nfService_api ./project_settings |
Then you must edit settings.py and replace all 'nfName_nfService_api' by 'project_settings'.
In order for the application to work, there are some modifications to do :
- In the "settings.py" file, you must modify it to have :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | """ Django settings for nfName_nfService_api project. Generated by 'django-admin startproject' using Django 2.0.2. For more information on this file, see https://docs.djangoproject.com/en/2.0/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/2.0/ref/settings/ """ import os # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = ')&qp80!quir_n1)9^(9=2mnix+y@&59fnmd@zp%1v3t=mn-kdz' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True ALLOWED_HOSTS = ['*'] # Application definition INSTALLED_APPS = [ 'corsheaders', 'nfService_api.apps.NfserviceApiConfig', 'rest_framework', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'project_settings.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] WSGI_APPLICATION = 'project_settings.wsgi.application' # Password validation # https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] # Internationalization # https://docs.djangoproject.com/en/2.0/topics/i18n/ LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/2.0/howto/static-files/ STATIC_URL = '/static/' CORS_ORIGIN_ALLOW_ALL = True |
- You shall delete the migrations directory and the tests.py which are useless for the lab.